爬虫-今日头条我的收藏-增量式下载网页内容(五)

背景:

原先我们下载的文件包含了收藏的元信息,包含标题,链接,文章摘要信息。这些基本的信息就足够支撑查询功能了。但还是存在如下问题:

  • 从业务上来说,文章的原作者可能会删除文章,那么收藏的文章将再也找到相关信息了。所以我们需要把这些信息也要保存。
  • 如果用户标题以及摘要信息不全面,重要信息在文章里面。那么关键字同样查询不到需要的信息。

所以,我们还是需要把网页的内容保存下来。

 

方案:

  • 需要根据元信息里面的链接去把html内容保存下来。
  • 元信息之前是存储在文件里面,html内容暂定还是保存为文件。每行的是一个json数据,key是id信息,value是html内容。 也考虑用id: html内容保存的形式,但是发现下载下来的html内容有多行的。会给解析造成一些麻烦。
  • 下载html内容可以使用requests,selenium,aiohttp异步方式下载。
    1. aiohttp异步方式虽然很快,但是会出现发送请求太频繁,服务端断连接的情况。有点头条的监控系统导致账号被锁。
    2. selenium的问题是它需要打开一个chrome浏览器,需要安装对应的chromedriver.exe,需要考虑等待时间让内容渲染,这对于抓取网页内容不准确。
    3. requests需要一个一个下载,对于这种io频繁无法复用协程.
  • 最终还是选择使用requests,原因在于这样比较安全,不会导致账号被锁,我也确实不知道头条会不会这么做?
  • aiohttps其实有代码实现,等把这么多的html内容下载下来再去验证至少稳妥一些。
  • 也需要支持断点功能下载功能,这么做的目的:文件比较大情况下,如果下载到一半,由重新下载,无疑会消耗很多时间,因此需要找到上次下载最后一条记录的id,反向查找元信息文件,从这个位置继续下载html内容。

 

遇到的问题:

  • 元信息里面的链接是需要301跳转,大约跳转三次才能得到真正的地址。request本身allow_redirects=True的情况无法通过得到真正的html内容。估计的是头条的保护措施。以后有时间再谢谢它redirect的过程
  • requests发送请求的时候,会添加一个header信息,实际上只有cookie信息是有用的,其他信息无用。
  • 收藏文章的url信息是分散在不同的字段里面,需要有判断逻辑。
  • 找断点的这个逻辑写起来要麻烦一点,代码需要重构一下。
  • cookie.txt文件涉及用户隐私,需要单独配置一个文件。

 

代码:

https://gitee.com/pmh905001/myfavorite/blob/master/toutiao/html_downloader_requests.py

 

posted on 2024-03-29 23:56  pmh905001  阅读(13)  评论(0编辑  收藏  举报

导航