IP代理软件,http代理,API提取-黑洞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. 09

    2019-05

    代理IP可以提高网络销售量

    做过电商或者微商的朋友应该都知道,网络销售需要一个稳定、强大的网络平台,才能更好的运转经营,现在已经进入了大数据时代,代理IP也成为了电商们提高销售量的一个选择,如何才能选

  2. 27

    2019-03

    代理IP如何帮助爬虫爬取搜狗微信的公众号文章?

    今天我们主要分享的是爬虫如何爬取搜狗微信的公众号文章,我们可以通过搜狗微信的接口获取微信文章的 url ,然后提取目标文章的内容及公众号信息。需要着重注意的是,搜狗微信在没有登

  3. 18

    2019-04

    代理IP如何爬虫帮助爬取到网页的源代码?

    今天我们就来看下,爬虫是如何爬取到网页源代码的。这里我们就以极光爬虫网站为例,来爬取网站的源代码,并把代码保存到本地。爬取时,需要用到python的urllib模块,具体代码如下:

  4. 05

    2019-05

    怎么用代理IP刷优酷等视频播放量?

    随着4G的普及,高速的网络给消费者提供了内容丰富、极致的体验的视频服务,无论是短视频还是直播亦或是像腾讯视频、爱奇艺、优酷等视频平台,但是随着内容作者们的竞争激烈,就会出现

  5. 22

    2019-04

    代理IP如何获取与分析旅游行业大数据

    旅游行业可以说和大数据还有互联网行业关系很密切,随着现在物质生活和思想观念的提高转变,越来越多的人开始将自己的空余时间转移到旅游上来。可以说,你在旅游中的每一个阶段都会涉

  6. 25

    2019-04

    什么软件可以换IP?用代理IP!

    在如今互联网时代,如果不懂点网络知识,那肯定otu,不然你什么都不知道,,现在什么都是用网络科技信息化等等一些高科技东西,例如现在出门都不带现金了,吃饭买东西娱乐等等都可以一