当前位置: 代码迷 >> 综合 >> scrapy+ selenium的小案例两则,爬取食品药品监管和twitter用户数据。
  详细解决方案

scrapy+ selenium的小案例两则,爬取食品药品监管和twitter用户数据。

热度:21   发布时间:2023-12-04 22:58:52.0

环境:python 3.6

  • scrapy
  • selenium
  • chrome
  • chrome-driver
  • windows 10
    如何安装python selenium 和对应谷歌版本的chrome-driver请自行在csdn中搜索。已经有很多大手子做过很详细的教程了。在这里我就不一一赘述了。
    本次只是单纯的提供两个在工作中使用到的小例子,以供大家更直观的使用scrapy+selenium的组合。
    1.食品药品监管
    因为该网站的数据在正常的请求后,返回的全是乱码,食品药品监管:http://qy1.sfda.gov.cn/datasearch/face3/dir.html
    有兴趣的同学可以自己请求访问试试,如果有新的发现,可以留言交流。
    因为数据要的比较急,所以没有时间一点点搞js破解和逻辑解析,因此直接使用最简单直接的爬取方式,
    模拟爬取!
    实例地址:链接:https://pan.baidu.com/s/1UqAmOqkj7ZhFEIlg4eq-3Q
    提取码:eat3
    在实例中,为了减少电脑资源消耗(浏览器的开关和重新等待对方服务器响应数据太费时间),因此每一个爬虫只开一个浏览器,一直到数据爬取完成后,才关闭该浏览器。减少浏览器打开和重加载的时间,加快爬取速度。
    基于这个设计思路,在爬虫开启后,直接在__init__中实例化并启动webdriver,在middleware中接收值并返回值。
    过程很简单,看一遍就会了。
    因为该网站的爬取策略中未对ip做限制,因此我就没有将动态ip+selenium加入其中,感兴趣的可以动手在本站中找一下,还是有很多的

2.推特用户数据搜索
为了响应某官方组织的要求,需要对舆情监控,现在缺少监控数据源。因此需要获取twitter中中文用户的昵称和id。 在找寻规则的过程中,twitter的防爬和防止机器操作作的很严谨。但还是有一个小的漏洞是可以使用的。
就是搜索不需要登录,可以直接抽空所搜关键字的url进行直接访问
实力地址:链接:https://pan.baidu.com/s/1YTOTkC6EinCB6ae2_ZEJQg
提取码:g1wv
在本爬虫遇上一个爬虫大体类似,区别在于在middleware中进行一次训混滚动条拖动和数据获取比较。、
内容也比较简单,可以直接下载运行。不过需要翻墙操作。

ps:其实有关于这个情形前提下还有一个构思,twitter嘛,自己的关注和粉丝都是有相同爱好的,尤其是关于这种反x反x的用户,只需要找到一个人的。然后遍历它的关注列表和粉丝,然后重复将存储到数据库中的这些人重复遍历查找。就会找到很多。
其中需要做的细节就是:
1.模拟登陆不要在正常的登陆页进行,会被机器测试,很麻烦。直接在搜索中做登陆。 如果你没有登陆的话,打开搜索页会在右上角自动弹出一个登陆框,本人做过几次模拟登陆,一个账号登陆了5次,分成不同的爬虫同时登陆的。可以登陆,并且不会被ban。
然后再跳转到起始目标源进行相关的爬取
2.数据存储的过程中,需要在数据后做一个是否爬区过的识别,否则会重复爬取
3.考虑到数据源多了以后,会出现关注+粉丝重复的情况,可以对用户的个人id(twitter)在数据库中做一个索引去重。也就是定义的字段不会存入相同的数据。 那么insert语句就需要在insert后面加上ignore,意义是如果数据存入出现重复,不报错
4.如果该方法穷尽下去的话,其实是可以把twitter的所有用户数据都搞到的。但没必要
我们需要对用户的名称做分割然后测试该list中是否含有汉字,如果有则存入,没有就抛弃。虽然会造成一定的数据丢失,但想必不会造成太大的丢失,因为你想啊:这种人肯定要在昵称或者个签上搞点动静,要不体现不出它们的个性对吧~ 这就是一个很好的排除方式了。

好了,就到这了。欢迎大家留言交流哈~~

  相关解决方案