首页 > 其他分享 >爬取博客园新闻

爬取博客园新闻

时间:2023-10-19 21:25:05浏览次数:41  
标签:info 新闻 博客园 爬取 text time news div id

目录

代码

import requests
from bs4 import BeautifulSoup
from multiprocessing import Pool
import sqlite3
import time
from tqdm import tqdm

your_cookie="your_cookie"


headers = {
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
    'Accept-Encoding': 'gzip, deflate, br',
    'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
    'Cache-Control': 'max-age=0',
    # 'Referer': 'https://news.cnblogs.com/n/104394/',
    'Sec-Ch-Ua': '"Microsoft Edge";v="117", "Not;A=Brand";v="8", "Chromium";v="117"',
    'Sec-Ch-Ua-Mobile': '?0',
    'Sec-Ch-Ua-Platform': '"Windows"',
    'Sec-Fetch-Dest': 'document',
    'Sec-Fetch-Mode': 'navigate',
    'Sec-Fetch-Site': 'same-origin',
    'Sec-Fetch-User': '?1',
    'Upgrade-Insecure-Requests': '1',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36 Edg/117.0.2045.31',
    'Cookie' : your_cookie
}





def get_news_info(news_id):
    url = f"https://news.cnblogs.com/n/{news_id}/"
    response = requests.get(url, headers=headers)
    soup = BeautifulSoup(response.text, 'html.parser')

    news_title_div = soup.find('div', {'id': 'news_title'})
    news_info_div = soup.find('div', {'id': 'news_info'})

    if news_title_div and news_title_div.a:
        title = news_title_div.a.text
    else:
        title = 'Not Found'

    if news_info_div:
        # print(f"{str(news_info_div)=}")
        time_span = news_info_div.find('span', {'class': 'time'})
        view_span = news_info_div.find('span', {'class': 'view' ,'id': 'News_TotalView'})

        if time_span:
            time_text = time_span.text.strip()
            # \.split(' ')[1]
        else:
            time_text = 'Not Found'

        if view_span:
            view_text = view_span.text
        else:
            view_text = 'Not Found'
    else:
        time_text = 'Not Found'
        view_text = 'Not Found'

    news_body = 'Not Found'
    news_body_div=soup.find('div', {'id': 'news_body'})
    if news_body_div:
        news_body = str(news_body_div)
    else:
        news_body = 'Not Found'

    return {
        'news_id' : news_id,
        'title': title,
        'time': time_text,
        'views': view_text,
        'news_body': news_body,
        'url': url,
    }

def save_to_db(news_info,filename):
    conn = sqlite3.connect(f'news_{filename}.db')
    c = conn.cursor()
    c.execute('''CREATE TABLE IF NOT EXISTS news
                 (news_id INT PRIMARY KEY, title TEXT, time TEXT, views TEXT, news_body TEXT, url TEXT)''')

    c.execute('''INSERT INTO news VALUES (?,?,?,?,?,?)''',
              (news_info['news_id'], news_info['title'], news_info['time'], news_info['views'],news_info['news_body'], news_info['url']))
    conn.commit()
    conn.close()



if __name__ == '__main__':
    with Pool(20) as p:   # Number of parallel processes
        new_id_start=75995-500
        new_id_end=75995
        news_ids = list(range(new_id_start,new_id_end ))
        start = time.time()
        for news_info in tqdm(p.imap_unordered(get_news_info, news_ids), total=len(news_ids)):
            save_to_db(news_info=news_info,filename=f"{new_id_start}~{new_id_end}")
        end = time.time()
        print(f'Time taken: {end - start} seconds')



## https://zzk.cnblogs.com/s?Keywords=facebook&datetimerange=Customer&from=2010-10-01&to=2010-11-01  也可以用博客园的找找看

结果展示


后面可以考虑:洗数据,数据挖掘之类的。

标签:info,新闻,博客园,爬取,text,time,news,div,id
From: https://www.cnblogs.com/yhm138/p/17775665.html

相关文章

  • GIL全局解释器锁、互斥锁、线程队列、进程池和线程池的使用、多线程爬取网页、协程理
    进程和线程的比较进程的开销比线程的开销大很多进程之间的数据是隔离的,但是,线程之间的数据不隔离多个进程之间的线程数据不共享----->还是让进程通信(IPC)------->进程下的线程也通信了---->队列GIL全局解释器锁(重要理论)Python在设计之初就考虑到要在主循环中,同时只有一......
  • 【小白必看】使用Python爬取喜马拉雅音频并保存的示例代码
    前言本文介绍了如何使用Python中的requests库来获取音频文件并保存到本地。在这个例子中,我们使用了喜马拉雅平台上的一个API接口来获取音频ID和名称,并使用这些信息构造音频地址,然后通过发送HTTP请求将音频内容下载保存到本地。运行效果截图导入requests库importrequests......
  • 【小白必看】Python爬取NBA球员数据示例
    前言使用Python爬取NBA球员数据的示例代码。通过发送HTTP请求,解析HTML页面,然后提取出需要的排名、姓名、球队和得分信息,并将结果保存到文件中。导入需要的库和模块importrequestsfromlxmlimportetree使用requests库发送HTTP请求。使用lxml库进行HTML解析。......
  • 【玩转Python系列】【小白必看】使用Python爬取双色球历史数据并可视化分析
    前言本文介绍了如何使用Python编程语言获取双色球历史数据,并使用数据可视化工具Matplotlib绘制了红球数量的折线图。通过对双色球历史数据的分析,我们可以更好地了解双色球的开奖规律和趋势。导入库importrequestsfromlxmlimportetreeimportcsvimportmatplotlib.pypl......
  • 爬虫实践07 | 爬取香港展会客户名单
    完整代码importrequestsimporttimeimportpandasaspdurl='https://www.globalsources.com/api/gsol-trade-show-bff/hk-online/v1/search-all-exhibitors'headers={'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)Apple......
  • selenium 版本4爬取淘宝商品信息
    fromseleniumimportwebdriverfromselenium.webdriver.chrome.serviceimportServicefromselenium.webdriver.common.byimportByfromselenium.webdriver.common.keysimportKeysfromtimeimportsleep#访问淘宝页面path=Service('C:\Python38\chromedrive......
  • 【Dotnet 工具箱】推荐一个使用Flutter编写的博客园客户端
    推荐一个使用Flutter编写的博客园客户端简单易用并且同时支持Android/Ios平台。功能包含博客园首页、新闻列表、博问列表、闪存、我的博客、知识库等。截图预览博客园首页新闻列表博问列表闪存列表我的我的资料我的博客知识库博客内容粉丝关注在启动项......
  • 正式来到博客园的第一天
    博客圆的主页DIY功能真的好。我一开始还想自己基于github搭建一个个人博客网站,但后来发现即便是搭好了网站,写文章也比较麻烦。这主要体现在图片的管理上,我好像得要把图片全部上传图床、又或者是放在一个统一的文件夹中。但是我并不习惯于这种写文章的方式,我常用typora写markdown,并......
  • 普象搜索词图片爬取
    功能说明:搜索普象网站以获取与特定搜索词相关的图片。将找到的每张图片保存到用户指定的文件夹中。允许并发下载,加速下载过程。目的:该代码主要是为了方便用户从普象网站批量下载与搜索词相关的图片。使用注意事项:在使用此脚本时,确保已安装所有必要的Python库,例如:os,req......
  • 由于蚂蚁老师课程视频中博客园网站更新,代码不适用于现有环境,故网上查找更新:网上爬取博
    importjsonimportreimportrequestsfrombs4importBeautifulSoupfOut=open("博客爬取文章列表标题及地址.txt","w",encoding="utf8")foridxinrange(20):print("#"*50,idx+1)url="https://www.cnblogs.com/AggSite/......