python爬虫--代理.让你的ip在坚挺一会!!

代理

代理简述

代理服务器:实现请求转发,从而可以实现更换请求的ip地址
    在requests中如何将请求的ip进行更换

代理的匿名度:
    透明:服务器知道你使用了代理并且知道你的真实ip
    匿名:服务器知道你使用了代理,但是不知道你的真实ip
    高匿:服务器不知道你使用了代理,更不知道你的真实ip

代理的类型:
    http:该类型的代理只可以转发http协议的请求
    https:只可以转发https协议的请求

免费代理ip的网站
    快代理
    西祠代理
    goubanjia
    代理精灵(推荐):http://http.zhiliandaili.cn/

在爬虫中遇到ip被禁掉如何处理?
    使用代理
    构建一个代理池
    拨号服务器

案例

import requests
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'
}

url = 'https://www.baidu.com/s?wd=ip'
#proxies={'http/https':'ip:port'}
page_text = requests.get(url=url,headers=headers,proxies={'https':'1.197.203.187:9999'}).text
with open('ip.html','w',encoding='utf-8') as fp:
    fp.write(page_text)
    
from lxml import etree
all_ips = [] #列表形式的代理池
proxy_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'
#在购买完代理ip后生成的HTML页面的url
proxy_page_text = requests.get(url=proxy_url,headers=headers).text  #爬取这个页面中的数据,也就是购买后的ip代理
tree = etree.HTML(proxy_page_text)
proxy_list = tree.xpath('//body//text()')

for ip in proxy_list:
    dic = {'https':ip}
    all_ips.append(dic)
all_ips

爬取西祠代理中的免费代理ip

import requests
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'
}

url = 'https://www.xicidaili.com/nn/%d'
free_proxies = []
for page in range(1,30):
    new_url = format(url%page)
    page_text = requests.get(new_url,headers=headers,proxies=random.choice(all_ips)).text # all_ips在上面的代码中
    tree = etree.HTML(page_text)
    tr_list = tree.xpath('//*[@id="ip_list"]//tr')[1:] #xpath表达式中不可以出现tbody
    for tr in tr_list:
        ip = tr.xpath('./td[2]/text()')[0]
        port = tr.xpath('./td[3]/text()')[0]
        t_type = tr.xpath('./td[7]/text()')[0]
        
        dic = {
            'ip':ip,
            'port':port,
            'type':t_type
        }
        free_proxies.append(dic)
    print('第{}页爬取完毕!!!'.format(page))
print(len(free_proxies))

猜你喜欢

转载自www.cnblogs.com/tangjian219/p/11988724.html