抓取网页新闻(本文会简单的爬取澎湃新闻网站的时事中国政库新闻 )

优采云 发布时间: 2021-12-17 23:02

  抓取网页新闻(本文会简单的爬取澎湃新闻网站的时事中国政库新闻

)

  本文将简单爬取澎湃新闻网站中国政治图书馆新闻,会涉及并发应用!

  

  分析网页

  https://www.thepaper.cn/list_25462

  The Paper of The Paper 网站 有点像梨视频网站。要获取更多内容,您需要下拉鼠标才能显示。是动态渲染的,所以需要进入浏览器开发用户工具→网络→XHR抓取内容并得到一个url。

  

  打开链接,得到一个简单的静态网页:

  

  每个链接的pageidx参数和lastTime参数都会发生变化。 pageidx 参数每次更改都会增加 1。 LastTime 是一个时间戳。这不会影响我们的抓取内容,只需将其删除即可。

  https://www.thepaper.cn/load_index.jsp?nodeids=25462&topCids=&pageidx=2&isList=true&lastTime=1616153518779

https://www.thepaper.cn/load_index.jsp?nodeids=25462&topCids=&pageidx=3&isList=true&lastTime=1616120430221

  点击打开一条内容,即新闻信息:

  

  每个内容链接都有一个唯一的id值,所以需要获取它的id值:

  https://www.thepaper.cn/newsDetail_forward_11765286

https://www.thepaper.cn/newsDetail_forward_11763702

  抓取想法:

  实用代码

  导入模块:

  import requests

import re

from lxml import etree

import concurrent.futures

  请求函数:

  保存功能:

  def save(title_li, text):

# 声明编码,不然会报错

with open('./x.text', mode='a', encoding='utf-8')as f:

f.write(title_li + '\n\n')

f.write(text + '\n\n')

# 因为保存在一个文件中,所以这里用*号进行隔开

f.write('*' * 50 + '\n\n')#

  分析功能:

  def main(html_url):

response = def_response(html_url)

href = re.findall('data-id="(.*?)"', response.text)

title = re.findall('alt="(.*?)"', response.text)

for url_li, title_li in zip(href, title):

# 拼接链接

url_ = f'https://www.thepaper.cn/newsDetail_forward_{url_li}'

res = def_response(url_)

etrees = etree.HTML(res.text)

# 这里用xpath提取文本内容,但是格式有点乱,所以用'\n\n'.join进行换行

text = '\n\n'.join(etrees.xpath('.//div[@class="news_txt"]/text()'))

save(title_li, text)

  发起人:

  if __name__ == '__main__':

# ThreadPoolExecutor 线程池的对象 max_workers 任务数 这里开了3个

executor = concurrent.futures.ThreadPoolExecutor(max_workers=3)

for page in range(0, 4):

url = f'https://www.thepaper.cn/load_index.jsp?nodeids=25462&topCids=&pageidx={page}&isList=true'

# main(url)

# submit 往线程池里面添加任务

executor.submit(main, url)

executor.shutdown()

  效果图:

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线