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. 05

    2019-09

    代理IP的换IP功能用在哪些项目?

    如今网络无处不在,代理IP的运用也越来越广了,许多平台都有约束的,为了不被封,还需求代理IP出马,那么代理IP可用于哪些项目防封呢?

  2. 23

    2019-03

    不用代理IP,用爬虫如何批量爬取抖音热门视频

    于自媒体营销推广来说,想要快速看到营销效果,必然需要大量频繁操作,这就很容易受到IP限制,不过现在市面上有很多代理IP软件可以解决这个问题。像论坛发帖、微博推广、百度问答等等

  3. 06

    2019-09

    代理IP商家中哪个代理ip实际应用好?

    许多人都需要使用国内代理ip的,如果能找个不错的商家,这样用起来也是不错的。

  4. 17

    2019-09

    高质量代理服务器ip资源

    如今不只是行业内人员,即使是普通用户对于高质量 代理服务器 ip 资源肯定都不陌生。毕竟如今已随着互联网的发展有很多行业都需要用到高质量代理服务器ip资源。同时在很多普通家庭中,

  5. 22

    2019-05

    http代理ip平台在市场上的竞争是否很大?

    其实要说的http代理ip平台,就不得不谈到如今在此类市场上出的一匹黑马,IP代理平台。 ​

  6. 28

    2019-08

    代理ip刷阅读量是否妥当?

    无论是做网站的SEO优化还是做自媒体工作,文章是优化和自媒体中必不可缺的物料之一,阅读量越高的文章越能够获得更好的排名,有更多的机会被网民点击浏览,增加点击阅读量。但是如果阅