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))

 

posted @ 2020-04-23 18:39  jasmineTang  阅读(92)  评论(0)    收藏  举报