美文网首页
180606StartCrawl

180606StartCrawl

作者: hawu0616 | 来源:发表于2018-06-06 14:54 被阅读0次

    记录项目数据采集工作中遇到的问题,改进的过程。

    django==1.1.16 python==3.5.3

    数据来源有三,所以结构设计大概是下面这种:

    django中的app_spider布局

    将各源的爬取方法单独写成app_spider下的GetData模块,在spider.views中写总的爬取类SpiderMethod,按照数据库设计分别从IP/DOMAIN/HASH进行汇总爬取,期间调用GetData模块的三个py文件中的爬取方法。注意模块的import路径。

    写完run,顺序爬取没有问题。

    之后加了协程池gevent_pool,效率提高但是出现了常见爬虫限制。

    一开始每次数据库写入或读取、更新操作后都会close(),造成下一次使用受限,所以试着run的时候注释掉了。感觉量小。没障碍。

    协程池加上,先每轮开了100个协程,mysql默认最大连接数默认100,不改也不关就各种开着连接,理所当然的阻塞了。所以修改mysql的my.init文件, 修改max_connections为1000(最高),重启mysql服务(管理--服务或者mysql command line)。

    协程池加上,先每轮开了100个协程,分别出现了api请求频率和次数限制。顺着这些问题去查了爬虫常出现的问题:IP限制、验证码、身份验证,大多有解决或缓解了我的问题。但我现在遇到的一个谷歌人机验证,没找到为何出现验证,也没找到能力之内的解决方法。

    下面记录解决常见限制的一些过程。在过程中尝试改用scrapy重写了一下整个爬虫。(scrapy默认多线程的,任务队列中请求失败的会一直一直请求,最后会记录请求次数,成功任务数等等。)所以在scrapy中遇到的这些常见限制也一起说了。

    django多协程爬虫/scrapy框架爬虫开ip代理、头部请求构造、UA代理、模拟登陆(cookies)

    scrapy开启ip代理需要在中间件增加ProxyMiddleware类,说明代理请求规则,代理可以放在设置文件setting.py中手动更新,也可以建立自己的ip代理池,或者建立自己的ip代理库,每次从库中随机挑选,同时配合ip的有效验证筛选等(还没做)。

    UA代理,模拟浏览器也是一样的套路。中间件添加RandomUserAgent类,说明UA获取方法,UA同样可以放在setting.py中手动更新。常见UA网上都有。

    头部请求构造放在项目文件py中定义。直接用。

    使用cookies模拟登陆用到一些包。同样中间件添加CookiesMiddleware类。然后就是cookies获取的问题了。有手动有自动(selenium)。

    相关文章

      网友评论

          本文标题:180606StartCrawl

          本文链接:https://www.haomeiwen.com/subject/pombsftx.html