Python爬虫中代理IP的使用

更新:2020/12/15 11:28:26 浏览:713次

使用Python测试前需要先获取一个可用的代理,某度搜索“代理”关键字,就可以看到许多代理IP服务商,几乎每家都有免费代理可以使用,推荐www.dieniao.com,以下是自动获取蝶鸟代理网站的代理IP。

 

1. # IP地址取自国内代理IP网站:https://www.dieniao.com/

2. # 爬取免费IP地址可以基础使用

3. from bs4 import BeautifulSoup

4. import requests

5. import random

6.  

7. url = 'https://www.dieniao.com/FreeProxy.html'

8. headers = {

9.     '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'

10.   }

11. def get_ip_list(url, headers):

12.   web_data = requests.get(url, headers=headers)

13.   soup = BeautifulSoup(web_data.text, 'lxml')

14.   ips = soup.find_all('tr')

15.   ip_list = []

16.   for i in range(1, len(ips)):

17.     ip_info = ips[i]

18.     tds = ip_info.find_all('td')

19.     ip_list.append(tds[1].text + ':' + tds[2].text)

20.   return ip_list

21.  

22. def get_random_ip(ip_list):

23.   proxy_list = []

24.   for ip in ip_list:

25.     proxy_list.append('http://' + ip)

26.   proxy_ip = random.choice(proxy_list)

27.   proxies = {'http': proxy_ip}

28.   return proxies

29.  

30. if __name__ == '__main__':

31.  

32.   ip_list = get_ip_list(url, headers=headers)

33.   proxies = get_random_ip(ip_list)

34.   print(proxies)#函数get_ip_list(url, headers)传入urlheaders,最后返回一个IP列表,列表的元素类似49.86.182.94:9999格式,这个列表包括蝶鸟代理IP网站免费代理页面的IP地址和端口。

 

 

但是免费的代理大多数时候是不好用的,比较靠谱的是购买付费的优质代理IP。函数get_random_ip(ip_list)传入第一个函数得到的列表,返回一个随机的proxies,这个proxies可以传入到requests的get方法中,这样就可以做到每次运行都使用不同的IP访问被爬取的网站,有效地避免了真实IP被封的风险。

 

把获取的代理传入:

1. headers = {

2.     'User-Agent':'Mozilla/5.0 (iPod; U; CPU iPhone OS 4_3 like Mac OS X; wo-SN) AppleWebKit/535.16.1 (KHTML, like Gecko) Version/4.0.5 Mobile/8B114 Safari/6535.16.1'

3. }

4. resp = requests.get('https://www.baidu.com',proxies = proxies,headers = headers)

5. print(resp.text)

 

  就可以通过代理ip获取网站数据了。