Python爬蟲技巧---設定代理IP

RainbowJhon發表於2018-07-12

在學習Python爬蟲的時候,經常會遇見所要爬取的網站採取了反爬取技術,高強度、高效率地爬取網頁資訊常常會給網站伺服器帶來巨大壓力,所以同一個IP反覆爬取同一個網頁,就很可能被封,這裡講述一個爬蟲技巧,設定代理IP

(一)配置環境

  • 安裝requests庫
  • 安裝bs4庫
  • 安裝lxml庫

(二)程式碼展示

  1. # IP地址取自國內髙匿代理IP網站:http://www.xicidaili.com/nn/
  2. # 僅僅爬取首頁IP地址就足夠一般使用
  3. from bs4 import BeautifulSoup
  4. import requests
  5. import random
  6. def get_ip_list(url, headers):
  7. web_data = requests.get(url, headers=headers)
  8. soup = BeautifulSoup(web_data.text, 'lxml')
  9. ips = soup.find_all('tr')
  10. ip_list = []
  11. for i in range(1, len(ips)):
  12. ip_info = ips[i]
  13. tds = ip_info.find_all('td')
  14. ip_list.append(tds[1].text + ':' + tds[2].text)
  15. return ip_list
  16. def get_random_ip(ip_list):
  17. proxy_list = []
  18. for ip in ip_list:
  19. proxy_list.append('http://' + ip)
  20. proxy_ip = random.choice(proxy_list)
  21. proxies = {'http': proxy_ip}
  22. return proxies
  23. if __name__ == '__main__':
  24. url = 'http://www.xicidaili.com/nn/'
  25. headers = {
  26. 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36'
  27. }
  28. ip_list = get_ip_list(url, headers=headers)
  29. proxies = get_random_ip(ip_list)
  30. print(proxies)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  1. 函式get_ip_list(url, headers)傳入url和headers,最後返回一個IP列表,列表的元素類似42.84.226.65:8888格式,這個列表包括國內髙匿代理IP網站首頁所有IP地址和埠。
  2. 函式get_random_ip(ip_list)傳入第一個函式得到的列表,返回一個隨機的proxies,這個proxies可以傳入到requests的get方法中,這樣就可以做到每次執行都使用不同的IP訪問被爬取的網站,有效地避免了真實IP被封的風險。proxies的格式是一個字典:{‘http’: ‘http://42.84.226.65:8888‘}。

(三)代理IP的使用

執行上面的程式碼會得到一個隨機的proxies,把它直接傳入requests的get方法中即可。

web_data = requests.get(url, headers=headers, proxies=proxies)
  • 1

相關文章