输入关键字 抓取所有网页(新浪微博爬取爬取微博启动和遇到bug怎么办?)

优采云 发布时间: 2021-11-11 12:18

  输入关键字 抓取所有网页(新浪微博爬取爬取微博启动和遇到bug怎么办?)

  该项目的主要功能是每天通过微博的“搜索”页面自动抓取自定义列表中所有收录词汇的微博原创数据。低速可控,简单粗暴,适用于含有关键词的微博有针对性的采集,每天可以抓取3万到6万条。

  但是后来我发现新浪其实也有这个API,只是隐藏的很深。当我发现爬虫已经写完了,所以我流下了眼泪。

  :(

  さぁ、始めよう~

  阐明

  基于python 2

  在 email_info.py 中添加您自己的电子邮件地址、密码和接收电子邮件地址

  sina_crawler.py 开头替换自己的关键词列表

  日期格式转码和计算方法都在function.py文件中

  项目介绍

  这个项目没有UI,虽然很简陋,但是我写的第一个爬虫是因为它可以运行

  本项目可以24小时不间断运行,获取更完整的微博抓取

  当开始爬取微博遇到bug时,会发邮件给你

  将获取的JSON数据写入txt,按文件夹&文件名进行管理

  对获取到的JSON数据的后续处理,请参见python处理微博JSON数据示例

  

  跑步

  获取的微博JSON数据按照发起请求的日期存放在对应的文件夹中。WBTestdata>04-12.

  

  微博资料夹

  每页 JSON 收录十个微博数据(一般)。每次返回的JSON单调存储在一个txt中,命名规则为“国名”+“日期”+“页码”。

  

  微博数据命名规则

  

  数据样本

  您可以使用在线 JSON 结构化工具进行审核

  

  JSON 数据结构

  项目背景

  新浪微博每个客户端都提供了“搜索”功能,可以获取收录关键词的微博,一般默认按照发帖顺序从新到旧显示。

  这里我们的目标页面是移动版的新浪微博(因为结构简单,加载的微博数据直接返回为JSON文件,方便获取)

  例如搜索关键词为德国时,页面显示如下:

  

  图像.png

  打开开发者工具,选择网络--XHR,然后向下滚动页面,直到加载新的微博,您会发现以下链接:

  

  图像.png

  点击预览:

  

  预览

  没错,这就是我们的目标数据——每当用户滚动到底部时,都会通过这个链接返回十条JSON格式的新微博。

  我们来看看这个链接的格式:

  %E5%BE%B7%E5%9B%BD&featurecode=20000320&luicode=10000011&lfid=106003type%3D1&title=%E5%BE%B7%E5%9B%BD&containerid=100103type%3D1%B7%Eq 9B%BD&page=2

  解码网址。事实上,它等价于:

  德国&featurecode=20000320&luicode=10000011&lfid=106003type%3D1&title=Germany&containerid=100103type%3D1%26q%3DGermany&page=1%26q%3D%E5% BE%B7%Bdpage

  关键信息一目了然,即queryVal=Germany,page=1。根据这个规则,我们可以构建目标链接进行数据爬取。

  新浪的这个JSON数据就是所谓的一页(1页),每次返回大约10条微博记录,但有时会少于10条。记录。

  代码结构

  首先介绍请求导入请求

  定义标题以伪装浏览器

  # 为爬虫添加标题

  headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'}

  添加要检索的关键字列表

  # 添加到您的搜索列表中!

  search_list = [“所罗门群岛”、“斯洛伐克”、“贝宁”、]

  ......

  将中文关键词转码为URL,方便后期搭建链接

  # 根据您提供的单词列表创建 url 编码的搜索列表

  urlencoded_search_list = url_encoding(search_list)

  urls = create_url_list(urlencoded_search_list)

  写个while:1个循环执行不停的操作,每个循环执行当天的任务。

  我设定的当天任务是:

  从开始搜索的page1开始继续向后搜索,获取每页最后一条微博的创建时间。如果这个微博是在两天内创建的,那么我们会继续检索页面,直到页面中的最。老的微博是两天前创建的。这时候,停止搜索这个词,继续下一个词

  这样做的原因是,新浪似乎并没有按照创建时间的顺序真正返回所有微博。两次检索同时获得的10条微博之间可能存在若干差异。微博越老,新浪返回的时间间隔越长——比如,假设用户创建微博的速度是稳定的。搜索收录关键词AAA的,page1有10条微博,都是5分钟内创建的,间隔几秒,但是查看100页时,10条微博可能间隔几个小时——这绝对是不科学的。

  这限制了我们在爬微博的时候从新到旧,并且限制了不能爬太多页面(因为旧数据太稀疏,价值会降低),并且最好重叠搜索一段时间,所以我创建了上面的规则,让日常任务实际上是【72小时内发布的微博】,让时间上的重叠可以得到越来越完整的“老”微博。

  在while循环内

  给自己发送一封电子邮件,提醒您程序已启动

  根据日期创建每日数据文件夹

  列表中每一个关键词从page=1开始搜索,获取一个页面,写一个页面,同时获取每个页面最后一条微博的创建时间,判断是否停止搜索

  4.完成所有关键词搜索后,给自己发邮件提醒你今天的任务已经完成

  打印一些数据信息,写日记,计算你需要睡多久(确保每天在同一时间开始任务,以减少额外的未知错误)

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线