scrapy--ipproxy
不要急于求成,你只要做的是比昨天的你更优秀一点
--匿名
今天给大家讲一下--IpProxy,由于从"http://www.xicidaili.com/nn"爬取,以下是我转载的博客
https://www.jianshu.com/p/8975a3997ab6
需要解决的问题
1.ip,端口和协议都是在静态页面中爬取
2.验证代理ip是否可用
这里就给大家看看爬取的代码怎么写,其他的配置可以看我之前的博客,具体代码可以进我的GitHub:。QAQ!!
# -*- coding: utf-8 -*-
import scrapy
from Iproxy.items import IproxyItem
import pdb
from Iproxy.settings import USER_AGENT
import re
from scrapy.linkextractors import LinkExtractor
import telnetlib class IproxySpider(scrapy.Spider):
name = 'iproxy'
allowed_domains = ['www.xicidaili.com']
start_urls = ['http://www.xicidaili.com/nn'] headers = {
'Accept': 'application/json, text/javascript, */*; q=0.01',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.8',
'Connection': 'keep-alive',
'Content-Length': '',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'Host': 'www.xicidaili.com',
'Origin': 'www.xicidaili.com',
'Referer': 'http://www.xicidaili.com/',
'User-Agent': USER_AGENT,
'X-Requested-With': 'XMLHttpRequest',
} #验证ip代理是否可用
def telnet(self,item):
try:
telnetlib.Telnet(item['origin_ip'], port=item['port'], timeout=10.0)
except:
print('connect failure')
return False
else:
print('conncet success')
return True def parse(self, response):
iplist = IproxyItem()
sels = response.xpath('//tr[@class="odd"]')
items = {}
for sel in sels:
ips = sel.xpath('./td[2]').extract()[0].encode('utf8')
ports = sel.xpath('./td[3]').extract()[0].encode('utf8')
types = sel.xpath('./td[6]').extract()[0].encode('utf8')
type = re.findall(r'\>(.*?)\<',types)[0] #获取ip代理协议,低址,端口
if type == 'HTTP':
#items = 'http://' + re.findall(r'\>(.*?)\<',ips)[0] +':'+re.findall(r'\>(.*?)\<',ports)[0]
items['origin_ip'] = re.findall(r'\>(.*?)\<',ips)[0]
items['port'] = re.findall(r'\>(.*?)\<',ports)[0]
if self.telnet(items):
iplist['ip_name'] = 'http://' + re.findall(r'\>(.*?)\<',ips)[0]
iplist['port'] = re.findall(r'\>(.*?)\<',ports)[0] if type == 'HTTPS':
items['origin_ip'] = re.findall(r'\>(.*?)\<', ips)[0]
items['port'] = re.findall(r'\>(.*?)\<', ports)[0]
#items = 'https://' + re.findall(r'\>(.*?)\<', ips)[0] +':'+re.findall(r'\>(.*?)\<', ports)[0]
if self.telnet(items):
iplist['ip_name'] = 'https://' + re.findall(r'\>(.*?)\<',ips)[0]
iplist['port'] = re.findall(r'\>(.*?)\<', ports)[0] print iplist
yield iplist #获取页面链接url
links = LinkExtractor(restrict_css='div.pagination')
for link in links.extract_links(response):
yield scrapy.Request(link.url,callback=self.parse)
scrapy--ipproxy的更多相关文章
- Scrapy学习篇(十二)之设置随机IP代理(IPProxy)
当我们需要大量的爬取网站信息时,除了切换User-Agent之外,另外一个重要的方式就是设置IP代理,以防止我们的爬虫被拒绝,下面我们就来演示scrapy如何设置随机IPProxy. 设置随机IPPr ...
- Scrapy实战篇(五)之爬取历史天气数据
本篇文章我们以抓取历史天气数据为例,简单说明数据抓取的两种方式: 1.一般简单或者较小量的数据需求,我们以requests(selenum)+beautiful的方式抓取数据 2.当我们需要的数据量较 ...
- 大型分布式爬虫准备 scrapy + request
那些高手 爬虫好文 而我避免这些问题的方式,控制台清除所有定时 var id = setInterval(function() {}, 0); while (id--) clearInterval(i ...
- Scrapy框架爬虫初探——中关村在线手机参数数据爬取
关于Scrapy如何安装部署的文章已经相当多了,但是网上实战的例子还不是很多,近来正好在学习该爬虫框架,就简单写了个Spider Demo来实践.作为硬件数码控,我选择了经常光顾的中关村在线的手机页面 ...
- scrapy爬虫docker部署
spider_docker 接我上篇博客,为爬虫引用创建container,包括的模块:scrapy, mongo, celery, rabbitmq,连接https://github.com/Liu ...
- scrapy 知乎用户信息爬虫
zhihu_spider 此项目的功能是爬取知乎用户信息以及人际拓扑关系,爬虫框架使用scrapy,数据存储使用mongo,下载这些数据感觉也没什么用,就当为大家学习scrapy提供一个例子吧.代码地 ...
- ubuntu 下安装scrapy
1.把Scrapy签名的GPG密钥添加到APT的钥匙环中: sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 6272 ...
- 网络爬虫:使用Scrapy框架编写一个抓取书籍信息的爬虫服务
上周学习了BeautifulSoup的基础知识并用它完成了一个网络爬虫( 使用Beautiful Soup编写一个爬虫 系列随笔汇总 ), BeautifulSoup是一个非常流行的Python网 ...
- Scrapy:为spider指定pipeline
当一个Scrapy项目中有多个spider去爬取多个网站时,往往需要多个pipeline,这时就需要为每个spider指定其对应的pipeline. [通过程序来运行spider],可以通过修改配置s ...
- scrapy cookies:将cookies保存到文件以及从文件加载cookies
我在使用scrapy模拟登录新浪微博时,想将登录成功后的cookies保存到本地,下次加载它实现直接登录,省去中间一系列的请求和POST等.关于如何从本次请求中获取并在下次请求中附带上cookies的 ...
随机推荐
- springCloud 概念介绍
微服务(Microservice) 那么首先介绍下微服务.微服务英文名称Microservice,Microservice架构模式就是将整个Web应用组织为一系列小的Web服务.这些小的Web服务可以 ...
- UrShop 商城系统介绍
UrShop能够帮助企业快速构建个性.高效.稳定.安全的网上商城并减少二次开发带来的成本.对于网店来说,UrShop除了安装便捷,功能上强大以外,操作上也非常方便快捷.优社电商秉承设身处地为客户着想的 ...
- 认识less和webstrom的less配置
认识less和webstrom的less配置 今天完成的事情: 首先第一件事情是,整理一下常用的颜色摄取 #F1F1F1 google的设置页面的body的背景颜色 #FFF 为google的内容块的 ...
- Dynamics CRM用户创建后自动添加到团队报错
前两天在实现一项需求——用户创建后自动添加到一个叫做“全体员工”的团队的时候,遇到了一个奇怪的错误,CRM的错误日志只有一句简单的“Generic SQL error.”.一般遇到这个错误处理都非比较 ...
- 跨平台图表控件TeeChart使用教程:将图表数据导出为XML格式
在开发者使用TeeChart进行开发的过程中,不管是在设计时或者运行时都可以使用的图表导出对话框将图表数据轻易地导出为XML格式: TeeChart最新版那下载地址 上图为TeeChart导出对话框的 ...
- centos6.5 网卡配置
家里用的电脑是电信拨号的 所以用不了桥接模式 改用nat vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE="eth0" HW ...
- mysql5.1安装图解教程
mysql5.1安装图解教程 曾经为了要搭建模拟平台,从内地网站学习到台湾网站,其中必不可少的一项就是MySQL,那时候正好普遍用5.1,所以也很习惯用MySQL5.1版本! 下面就以MySQL5.1 ...
- kk录像机怎么剪辑视频 kk录像机视频剪辑教程
很多朋友录制视频都是用KK录像机,录制视频过后我们需要对视频进行修改和调整,下面小编就教大家怎么来剪辑KK录像机录制的视频 1.首先我们打开软件点[添加一个视频],添加需要剪切的视频 2.将播放指针移 ...
- node实现爬虫
node实现获取到豆瓣电影排行榜页面. 准备工作: 1.新建一个文件夹node 在当前文件夹中打开cmd 下载 npm install 初始化 npm init(注意一下:如果你的npm init没有 ...
- Git由来
很多人都知道,Linus在1991年创建了开源的Linux,从此,Linux系统不断发展,已经成为最大的服务器系统软件了. Linus虽然创建了Linux,但Linux的壮大是靠全世界热心的志愿者参与 ...