黑洞HTTP

黑洞HTTP

您的位置: 首页 > 新闻资讯 > HTTP代理 > 正文

如何使用动态ip抓取豆瓣电影数据 ?

发布时间:2019年03月08日 来源:http://http.hunbovps.com/News/getList/catid/8/id/95.html

利用爬虫爬取数据已经不是什么新鲜的事了,但你有想过怎么利用爬虫爬取豆瓣上的电影吗?如果不懂的朋友可以看看本文哦。

如何使用动态ip抓取豆瓣电影数据 ?

(一)反爬虫策略分析:

之前其实有搜到过笑虎大大的文章:单机30分钟抓取豆瓣电影7万+数据:论爬虫策略的重要性(附全部数据下载地址),但是发现单ip+随机cookie的方法已经失效了。经过我不断摸索,总结规律如下。


(1)单个ip不带cookie访问多次,ip不一会被封


(2)首次访问返回cookie值,带同一个cookie值连续访问,几分钟被封;带不同cookie值访问,大约十分钟之后,IP还是被封了。


(3)单个ip低速访问(10s以上),不会被封


(二) 爬虫策略分析:

简单来说,有这么几个防止反爬方法:


带随机User Agent:最简单,新手也都会


设置爬取间隔时间: 简单,但是大大降低效率


带可用cookie:可难可容易找规律,会需要带上一些认证或者解密的数值去计算


使用代理:简单粗暴有效,但是维护代理是个问题


由于单个ip怎么样都会被封,所以我投向了代理的怀抱,常见的有代理IP和云立方动态vps。爬虫策略大致如下:


三个随机:随机UA,随机代理,随机cookie


网上免费代理一抓一大把,质量低下,不稳定,一开始自己写了个proxypool,来过滤各大网站可能的ip再去爬,好不容易抓到一些能用,过了一会,这些ip又失效,或者又被封。最后遂决定还是得搞个动态的ip池。


对于使用免费代理:


可以参考git上的一个开源项目:jhao104/proxy。用了几个类似的,感觉这个是最好的,它主要用flask做了一个api来实时刷新可用ip,不仅可以抓取各大主流免费代理ip,还能定时检验ip的可用性。但是这个项目还是有一个问题,比如当我设定抓取的间隔为10秒之后,执行任务的时间可能大于10s,会报一个warning引发整个程序暂停。


对于使用付费代理:


我个人不想再用免费低质的ip,遂买了那种包天的套餐,后来又丑陋地膜改了下这个jhao104/proxy的开源项目,只留下主要api+抓取proxy+数据库的功能,每5秒一刷10个ip,爽歪歪~ 用付费代理的朋友可以参考下我的方法~proxy丰富的话,爬取数据时候可以不需要sleep的,另外用云立方动态ip拨号vps也可以达到相同的效果。


(三)代码实现:


爬取过程:


首先找到豆瓣的索引页面,通过查看源代码发现,页面内容是动态显示的。通过谷歌浏览器自带的F12->Network->XHR,找到json的入口。


动态页面有两种解析方式,一种直接用自带的json库,另一种selenium库+Phantom JS来模拟真实浏览器。点开页面,幸好~呼呼,没用加密,直接用json库就可以。


json网址的格式大概是这样的:


xx/j/new_search_subjects?sort=T&range=0,10&tags=&start=20&genres=%E5%96%9C%E5%89%A7


通过观察,发现start=用来控制页数,每个页面有20部电影,20一整数一变。每个页面有相关电影名字,链接等。


打开单个电影页面,比如:xx/subjec。我所爬的信息如图中所示。


某部最近看了喜欢的电影


OK,大致思路来了。首先我们获取每个json页面的film信息,当json页面没有返回内容时候,解析停止,再去逐条分析单个电影静态页面的信息,打包入库。


2. 几个关键点:


解析方式:选了xpath,效率比某soup高很多,正则解析效率最高,但是开发效率较低(其实是我背不出


多线程:爬虫算是IO型任务,使用多线程。用的是multiprocessing.dummy,似乎鲜为人知,比threading感觉使用上简单一点,不是很明白两者之间的区别?之后会尝试下和threading比比效率。


MongoDB: Proxy和电影的信息都存在Mongodb里,其实用redis存proxy更好,但是我不高兴开那么多数据库了,后来发现mongodb似乎各种不稳定……有个topology was detroyed的错误时常发生导致数据库失联,有老铁知道这是为啥嘛?


爬proxy时间间隔:这个其实还挺重要,因为代理有效时效有限(我买的是保证五分钟),最好的效果应该是代理池里数量稍大于实际用量,也就是假设proxy可用率为50%,5秒用坏一个proxy,五分钟proxy失效,那么大概设定平均略小于2.5秒左右刷新1个proxy比较好。如果proxy在数据库里冗余,大量失效proxy会导致爬虫效率降低。


(四)成果


爬取结果:


四核开了四线程,爬虫效率大概是十分钟400部左右


2. 查询使用


数据在Mongodb里,大概是长这样的:


某个document


如果想找个电影看看,如:


评分高于7.5分


观看人数在1000~20000人之间


科幻片


可以写类似的query:


db.collection.find({'$and': [{'star': {'$gte': 7.5}}, {'pp': {'$gte': 1000, '$lte': 20000}},{'type':re.compile('科幻')}]})


经过整合,清洗之后,总共有41960 部电影,以json格式从Mongodb里导出


(五)最后:


感兴趣的同学可移步我另外一个回答:


有哪些质量很高的冷门电影?


下一步会继续研究scrapy+redis+mongodb走向分布式,提高爬虫效率,以及做一些简单的数据分析。


黑洞http使用动态IP可以轻松抓取企业信息、分类信息、房地产信息、电商信息等,轻轻松松解决爬虫IP被封的问题。


相关文章内容简介

1 如何使用动态ip抓取豆瓣电影数据 ?

利用爬虫爬取数据已经不是什么新鲜的事了,但你有想过怎么利用爬虫爬取豆瓣上的电影吗?如果不懂的朋友可以看看本文哦。(一)反爬虫策略分析:之前其实有搜到过笑虎大大的文章:单机30分钟抓取豆瓣电影7万+数据:论爬虫策略的重要性(附全部数据下载地址),但是发现单ip+随机cookie的方法已经失效了。经过我不断摸索,总结规律如下。(1)单个ip不带cookie访问多次,ip不一会被封(2)首次访问返回cookie值,带同一个cookie值连续访问,几分钟被封;带不同cookie值访问,大约十分钟之后,IP还是被封了。(3)单个ip低速访问(10s以上),不会被封(二) 爬虫策略分析:简单来说,有这么几个防止反爬方法:带随机User Agent:最简单,新手也都会设置爬取间隔时间: 简单,但是大大降低效率带可用cookie:可难可容易找规律,会需要带上一些认证或者解密的数值去计算使用代理:简单粗暴有 [阅读全文]

热门标签

最新标签

推荐阅读

  1. 23

    2019-11

    如何正确调用API链接提取代理ip?

    在互联网的发展需求中,推动了代理ip新的浪潮,在很多不同的场景下使用代理ip,如何获取到ip,获取ip的渠道很多,网上搜集,ADLS多拨资源,拨号vps等都可以获取到,但大部分用户会选择去专

  2. 27

    2018-12

    Android 手机如何设置http代理?

    一些软件需要抓取手机数据,这就需要跟手机进行连接才可以获取到手机应用上相关的数据,以我们便进行分析数据,才能更好获取到相关数据,同时需要设置http代理才能连测试环境。

  3. 23

    2019-07

    http代理是什么意思?

    很多人都知道的,不管大家在网上查询任何事物或者咨询网站,我们都是都需要输入http,其实这就是介于浏览器和web之一台服务器,也是在文本传输协议上的网络浏览方式,为此今日就来分析

  4. 01

    2019-08

    使用代理IP解决爬虫问题

    代理IP就是替换本机电脑的真实IP,在爬虫的时候容易被对方网站封IP,用代理IP就没有这个困扰了。通常情况下,爬虫用户都会选择代理IP软件来帮助自己的工作。

  5. 12

    2019-07

    网络发帖被限制怎么办?用http代理!

    说起论坛,贴吧这类对于现在的新一代网民来说可能并不熟悉,现在网络用户普遍低龄化,这些对于一些90,80后来书还是比较熟悉的,现在也有很多人在做论坛,贴吧,会有人在上面发帖评论交

  6. 16

    2019-08

    使用错误的代理服务器有什么后果?

    当你使用那个免费代理服务器时,你认为你得到了一个很好的协议?(注意:那是讽刺)让我告诉你一些事情。对于提供未阻止的因特网访问的代理,服务器需要大量的带宽来向用户发送信息。