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

    2019-01

    一分钟带你了解HTTP代理基础知识

    ​HTTP安全协议即超文本传送协议,是Internet上行信息内容传送时应用最为普遍的一种最简单的通信协议。一部分局域网对协议进行了限止,只准许用户通过HTTP协议浏览外界网址。

  2. 20

    2019-05

    使用代理IP经常遇到哪些错误

    在使用代理IP的过程中,经常会遇到一些问题,可能一夜醒来,发现代理IP全都不能用了,也有可能就吃了个中午饭,下午的代理IP就大面积失效了,这是为什么呢,是代理IP的质量突然下降了吗

  3. 20

    2019-03

    代理IP和vps的区别

    代理ip:ip是上网需要唯一的身份地址,身份凭证,而代理ip就是我们上网过程中的一个中间平台,是由你的电脑先访问代理ip,之后再由代理ip访问你点开的页面,所以在这个页面的访问记录里

  4. 20

    2019-03

    动态ip代理会让游戏封号吗?

    封号,是广大玩家和游戏工作室最不想碰到的事之一。封号的理由也是千奇百怪。不管是挂机还是注册账号或是别的,很多人都被封号过,辛苦的成果付诸东流不说,还有可能被游戏公司“拉黑

  5. 21

    2019-03

    使用IP代理可以防止真实IP被跟踪吗?

    我们使用IP代理就是为了隐藏我们真实的IP地址,保护隐私,防止追踪。黑洞http都能够为您提供海量纯净高匿名的代理IP,满足您的各种使用需求。因此在选择IP代理前,我们需要了解一下IP

  6. 21

    2019-03

    代理ip怎么维护网上安全?

    现在大家打开电脑或者是打开手机的第一件事一般就是打开各种聊天软件或者是登录一些自媒体平台,或者是打开浏览器看一下一些新闻页面,这些看起来稀松平常的事情,也是大家每天都在做