
qq:800819103
在线客服,实时响应
qq群
在线客服,实时响应
客服电话
400-998-9776转3爬虫程序在抓取部分网站的时候是需要用到代理IP的,比如想要提升爬取速度,IP被禁,网站由于限制无法直接访问等。下面我们来看看如何使用HTTP代理IP。
在scrapy中专门提供了HttpProxyMiddleware来给scrapy爬虫设置代理。
HttpProxyMiddleware默认就是开启的,它会在系统环境变量中搜索当前系统代理,作为scrapy爬虫使用的代理。
下面是源码解析:
_get_proxy方法:
解析代理配置信息,返回身份验证信息以及代理服务器url
__init__方法:
在HttpProxyMiddleware的构造器中,使用python标准库urllib中的getproxies函数在系统环境变量中搜索系统代理的相关配置(变量名格式为[格式]_proxy的变量),调用self._get_proxy方法解析代理配置信息,并将其返回结果保存到self.proxies字典中,如果没有找到任何代理配置的话,就抛出NotConfigured异常,HttpProxyMiddleware就会被放弃使用
process_request方法
处理每一个待发送的请求,为没有设置过代理的请求(meta属性不包含proxy字段的请求)调用self.set_proxy方法设置代理
_set_proxy方法
为一个请求设置代理,以请求的协议(HTTP或者HTTPS)作为键,从代理服务器信息字典self.proxies中选择代理,赋给request.meta的proxy字段。对于身份需要验证的代理服务器,添加HTTP头部Proxy-Authorization,他的值是在_get_proxy方法中计算得到的。
总结:
在scrapy中为一个请求设置代理就是将代理服务器的url写到request.meta['proxy']中
使用多个代理:
利用HttpProxyMiddleware为爬虫设置代理的时候,对于一种协议(HTTPShuozheHTTP)的所有请求只能使用一个代理,如果想使用多个代理,可以在构造每一个Request对象的时候,通过meta参数的proxy字段手动进行设置
import scrapy
from scrapy import Request
import json
class XiciSpider(scrapy.Spider):
name = "xici_proxy"
allowed_domains = ["www.xicidaili.com"]
def start_requests(self): #爬取http://www.xicidaili.com/nn/前3 页 foriin range(1, 4):
yield Request('http://www.xicidaili.com/nn/%s' % i)
def parse(self, response):
for sel in response.xpath('//table[@id="ip_list"]/tr[pos
# 提取代理的IP、port、scheme(http or https)
ip = sel.css('td:nth-child(2)::text').extract_first()port = sel.css('td:nth-child(3)::text').extract_first()scheme = sel.css('td:nth-child(6)::text').extract_first()
# 使用爬取到的代理再次发送请求到http(s)://httpbin.org/ip url = '%s://httpbin.org/ip' % scheme
proxy = '%s://%s:%s' % (scheme, ip, port)
meta = {
'proxy': proxy,'dont_retry': True,'download_timeout': 10,
# 以下两个字段是传递给check_available 方法的信息,方便 '_proxy_scheme': scheme,
'_proxy_ip': ip,
}
yield Request(url, callback=self.check_available, meta=meta, dont_filter=True)
def check_available(self, response): proxy_ip = response.meta['_proxy_ip']
# 判断代理是否具有隐藏IP 功能
if proxy_ip == json.loads(response.text)['origin']:
yield {
'proxy_scheme': response.meta['_proxy_scheme'], 'proxy': response.meta['proxy'],
}
代理IP的使用在网站服务器之间建立起来了一个信息中转站,信息先进入到代理服务器,这样操作,我们可以避免网站的反爬虫。
http协议是非常常见的,我们平常打开网页访问都是使用http请求的,http请求的方法比较多种,其中经常用到post请求和get请求,那么这两种请求有什么区别呢?使用哪种请求比较好?
你是不是经历过IP被封的情况?在爬虫、网络营销的场景中,出现的最多,但是有了代理IP,大家就可以不用担心了。
账号IP地址定位异常被封的几率大,这是很常见的事情。我们需要连接网络,这是一定要获取到IP地址才能连接到网络的。
有时候在抓取APP信息时,无缘无故就出现错误了,但用其他手机测试又没有问题?这到底是什么原因导致的错误?会不会是使用代理IP的问题?我们分析一下:
HTTP代理IP软件大家都不陌生了,对于很多网络工作人员来说是必不可少的工具,提升了很多工作效率。但是很多人还是对HTTP代理IP软件不是很了解,还有很多人认为手动切换IP也很好,并不相信
代理ip的有效时间有多长?既然是动态代理ip,自然是有时效的,时效最差的是免费代理ip,很多时候刚检测能用,但下一秒就不行了。使用这效果的代理ip是不行的,那么代理ip的有效时间有多