第2.1章 scrapy之国内高匿代理IP爬取
2017-06-13 16:02
323 查看
这个网站较为简单,故作为爬虫的第一个示例
代码如下:
scrapy是异步爬取的,所以从下面的日志可以看出爬取的网站不是按照顺序返回的。
代码如下:
# -*- coding: utf-8 -*- ''' Created on 2017年6月12日 从国内高匿代理IP网站中获取动态ip信息 @see: http://www.xicidaili.com/nn/1 @author: dzm ''' import sys reload(sys) sys.setdefaultencoding('utf8') import scrapy from pyquery import PyQuery as pq from eie.middlewares import udf_config from eie.items import EieIpItem logger = udf_config.logger class IpXicidailiSpider(scrapy.Spider): name="ip_xicidaili" allowed_domains = ["xicidaili.com"] start_urls = [ "http://www.xicidaili.com/nn" ] def parse(self, response): logger.debug(response.url) # 请求第一页 yield scrapy.Request(response.url+'/1', callback=self.parse_item, dont_filter=True) # 请求其他页 soup = pq(response.body) pageSum = soup('.pagination a:nth-last-child(2)').text() logger.debug('pageSum is %s ', pageSum); if pageSum: for i in range(2, int(pageSum)): url = response.url+ '/' + str(i) yield scrapy.Request(url, callback=self.parse_item) def parse_item(self,response): logger.debug('现在开始爬取的网址是 %s' , response.url); soup = pq(response.body) trs = soup('#ip_list tr') if trs: for i in range(2, trs.length): tr = trs.eq(i) if tr: # 超过3s代理,以及存货时间为小时、分的过滤掉 life = tr('td:eq(8)').text() if self.is_valid_time(life=life): speed = tr('td:eq(6) > div').attr('title') speed = self.filter_speed(speed); if speed < 3: # 速度超过3s的代理视为太慢,不考虑 item = EieIpItem() item['ip'] = tr('td').eq(1).text() item['port'] = tr('td').eq(2).text() item['type'] = tr('td').eq(5).text() item['life'] = self.filter_life(life) item['speed'] = speed yield item def filter_speed(self,speed): ''' 过滤速度 ''' speed = speed.replace(u'秒','') return float(speed) def filter_life(self,life): ''' 过滤存活时间 ''' life = life.replace(u'天','') return life def is_valid_time(self,life): ''' 判断是否是有效的时间 ''' if life.rfind(u'分')>=0 or life.rfind(u'时')>=0: return False else: return True
scrapy是异步爬取的,所以从下面的日志可以看出爬取的网站不是按照顺序返回的。
相关文章推荐
- Scrapy爬取美女图片第三集 代理ip(下)
- 第2.2章 scrapy之多进程检测代理ip的有效性
- scrapy抓取免费代理IP
- Scrapy爬取美女图片第三集 代理ip(下)
- Scrapy学习篇(十二)之设置随机IP代理(IPProxy)
- Scrapy爬虫:代理IP配置
- Python-Scrapy 个人兴趣教程(二):没错,从代理IP开始
- 用scrapy获取代理ip地址
- IP代理 国内代理服务器 国内最全代理 代理服务器列表 国内代理服务器
- 第三百四十八节,Python分布式爬虫打造搜索引擎Scrapy精讲—通过自定义中间件全局随机更换代理IP
- scrapy使用代理ip的时候下载器中间件的配置文件设置
- 代理 IP代理 国内代理 服务器 国内 最全代理 代理服务器列表 国内代理服务器
- 第1.7章 scrapy之ip代理的使用
- Scrapy爬虫:代理IP配置
- 小项目-数据爬取篇:scrapy框架,手机网页,工作信息存入MongoDB,代理ip中间件
- scrapy怎么设置带有密码的代理ip base64.encodestring不能用 python3.5,base64库里面的encodestring()被换成了什么?
- Scrapy的Ip代理的配置(未完成)
- scrapy,添加随机代理ip和user-agent