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的 ...
随机推荐
- Python常用模块二
一.time & datetime #_*_coding:utf-8_*_ import time # print(time.clock()) #返回处理器时间,3.3开始已废弃 , 改成了t ...
- EF删除数据
1.方法一,面向对象 using (MyDbContent content = new MyDbContent()) { content.Entry<UserInfo>(model).St ...
- transient和volatile
transient和volatile两个关键字一个用于对象序列化,一个用于线程同步,都是Java中比较高阶的话题,简单总结一下. transient transient是类型修饰符,只能用来修饰字段. ...
- JDBC之Java连接mysql实现增删改查
使用软件:mysql.eclipse 链接步骤: 1.注册驱动 2.创建一个连接对象 3.写sql语句 4.执行sql语句并返回一个结果或者结果集 5.关闭链接(一般就是connection.stat ...
- spring aop xml中配置实例
http://blog.csdn.net/wangpeng047/article/details/8560694
- css透明边框实现
代码: css: .box1{ background: black; padding:20px; } .box2{ background: #fff; border: 10px soli ...
- canvas制作运动的小球
<!DOCTYPE html> <head> <title>canvas</title> <style> .canvas{ border: ...
- 如何让MVC和多层架构和谐并存(一)
MVC的架构和多层架构,在ORM框架上是不兼容的.MVC的数据库操作需要通过实体框架Entity Framework,多层的数据库操作需要通过DAL层.我们最近刚完成的项目,实现了MVC和多层的并存, ...
- [转]Android时间获取与使用
编写Android网络程序时难免会遇到手机时间不准确的问题,本文总结了一些常用的时间获取与校正方法: 转载请注明:http://blog.csdn.net/xzy2046 1.获取本机当前时间: Ti ...
- NutDao配置多数据源
首先,我必须声明,这是一个非常简单的方法,很多小菜没做出来,是因为把nutz想得太复杂 数据源(或者是数据库连接池),在Nutz.Ioc看来,是一个普通的Bean,没任何特别之处. 再强调一点,除了$ ...