python-爬虫(6)-代理
代理是啥?爬虫在短时间内会向服务器发起高频请求,服务器会把你禁掉。不想被禁掉,那么用代理。
代理的匿名度分三种:
透明:代理+也知道你的真实Ip
匿名:代理+不知道真实ip
高匿:不知道代理+不知道真实ip
早先可能还可以用免费的,现在一般都得用付费的,按分钟买。不过也不要以为通过代理就被爬网站就不知道你,通过付费代理商很容易就可以查到你,所以不要爬不让你爬的东西,哈哈。
你用这个之前,得先去付费买个代理,不是很贵,几块钱一天吧。
程序实现,3步走:
1.构建代理池 为字典格式
1.1发请求到url是买的url的地址 ,
1.2得到的ip封装成一个字典,如下:
ips_list=[
{'https':'192.10.1.1:8080'},
{'https':'192.10.1.1:8080'},
{'https':'192.10.1.1:8080'},
2.使用代理Ip
2.1 requests.get 添加参数:proxies={'http':'ip:port'}
2.2 随机从ips_list中选参数
3.解析数据
上代码,给大家一个参考。网页中数据解析还是要根据网站内容先分析的。
from lxml import etree
import requests
import random
#1.构建一个代理池 其实就是得到ip
# 1.1发请求到url是买的url的地址 ,
# 1.2得到的ip封装成一个字典
url_dl='https://'
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'
}
ips_list=[]
page_text=requests.get(url=url_dl,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)
#2.使用代理池并发送请求
url=''
all_data=[]
for page in range(1,200):
new_url=format(url%page)
# 随机从proxies={'http':'ip:port'} 中选IP
page_text=requests.get(url=new_url,headers=headers,proxies=random.choice(ips_list)).text
#3.解析返回数据
tree=etree.HTML(page_text)
tr_list =tree.xpath('//*[id="ip_list"]//tr')[1:] #xpath不可以出tbody标签
for tr in tr_list:
ip_addr=tr.xpath('./td[2]/text()')[0]
all_data.append(ip_addr)
print(len(all_data))

浙公网安备 33010602011771号