天天看點

IP代理

代理操作

  • 概念:代理伺服器
  • 代理伺服器的作用
    • fiddler就是一個典型的代理伺服器的抓包工具。
    • 代理伺服器就是用來轉發請求和響應。可以讓代理伺服器轉發請求進而更換請求的原始ip位址。
  • 代理和爬蟲之間的關聯?
    • 爬蟲程式可能會在短時間内對指定的伺服器發起高頻的請求。伺服器端會将該高頻請求的ip禁掉。
  • 代理的匿名度
    • 透明:對方伺服器知道你使用了代理也知道你的真實ip
    • 匿名:知道你使用了代理,但是不知道你的真是ip
    • 高匿:不知道你使用了代理,更不知道你的真是ip
  • 代理的類型
    • http:隻能代理http協定的請求
    • https:代理https協定的請求
  • 如何擷取代理伺服器?
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))           

繼續閱讀