代理操作
- 概念:代理服务器
代理服务器的作用
- fiddler就是一个典型的代理服务器的抓包工具。
- 代理服务器就是用来转发请求和响应。可以让代理服务器转发请求从而更换请求的原始ip地址。
代理和爬虫之间的关联?
- 爬虫程序可能会在短时间内对指定的服务器发起高频的请求。服务器端会将该高频请求的ip禁掉。
代理的匿名度
- 透明:对方服务器知道你使用了代理也知道你的真实ip
- 匿名:知道你使用了代理,但是不知道你的真是ip
- 高匿:不知道你使用了代理,更不知道你的真是ip
代理的类型
- http:只能代理http协议的请求
- https:代理https协议的请求
如何获取代理服务器?
免费:几乎不能用
- 西祠代理
- 快代理
- goubanjia
付费:
- 对https://www.xicidaili.com/nn/3网站进行高频的请求发送,让其将本机ip禁掉,使用代理机制解禁
from lxml import etree
url = 'https://www.xicidaili.com/nn/%d'
all_data = []
for page in range(1,30):
new_url = format(url%page)
page_text = requests.get(url=new_url,headers=headers).text
tree = etree.HTML(page_text)
#在xpath表达式中不可以出现tbody标签,否则会出问题
tr_list = tree.xpath('//*[@id="ip_list"]//tr')[1:]
for tr in tr_list:
ip_addr = tr.xpath('./td[2]/text()')[0]
all_data.append(ip_addr)
print(len(all_data))
- 使用代理机制解除ip被禁的情况
import requests
#1.构建一个代理池
ips_list = []
url = 'http://t.11jsq.com/index.php/api/entry?method=proxyServer.generate_api_url&packid=1&fa=0&fetch_key=&groupid=0&qty=52&time=1&pro=&city=&port=1&format=html&ss=5&css=&dt=1&specialTxt=3&specialJson=&usertype=2'
page_text = requests.get(url=url,headers=headers).text
tree = etree.HTML(page_text)
ip_list = tree.xpath('//body//text()')
for ip in ip_list:
dic = {'https':ip}
ips_list.append(dic)
ips_list
import random
#使用代理池操作
url = 'https://www.xicidaili.com/nn/%d'
all_data = []
for page in range(1,30):
new_url = format(url%page)
#proxies={'http':'ip:port'}
page_text = requests.get(url=new_url,headers=headers,proxies=random.choice(ips_list)).text
tree = etree.HTML(page_text)
#在xpath表达式中不可以出现tbody标签,否则会出问题
tr_list = tree.xpath('//*[@id="ip_list"]//tr')[1:]
for tr in tr_list:
ip_addr = tr.xpath('./td[2]/text()')[0]
all_data.append(ip_addr)
print(len(all_data))