Python爬蟲(一)之獲取代理IP



設置代理IP的原因

我們在使用Python爬蟲爬取一個網站時,通常會頻繁訪問該網站。假如一個網站它會檢測某一段時間某個IP的訪問次數,如果訪問次數過多,它會禁止你的訪問。所以你可以設置一些代理服務器來幫助你做工作,每隔一段時間換一個代理,這樣便不會出現因為頻繁訪問而導致禁止訪問的現象。


代碼模塊(一)獲取代理IP列表

這里以西刺代理IP為例(鏈接),免費和方便爬取以獲取IP是它的優點。但是據說經常會出現無法使用的情況。
示例代碼

# 僅爬取西刺代理首頁IP地址

from bs4 import BeautifulSoup
from urllib.request import urlopen
from urllib.request import Request

def get_ip_list(obj):
ip_text = obj.findAll('tr', {'class': 'odd'}) # 獲取帶有IP地址的表格的所有行
ip_list = []
for i in range(len(ip_text)):
ip_tag = ip_text[i].findAll('td')
ip_port = ip_tag[1].get_text() + ':' + ip_tag[2].get_text() # 提取出IP地址和端口號
ip_list.append(ip_port)
print("共收集到了{}個代理IP".format(len(ip_list)))
print(ip_list)
return ip_list


if __name__ == '__main__':
url = 'http://www.xicidaili.com/'
headers = {
'User-Agent': 'User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36'}
request = Request(url, headers=headers)
response = urlopen(request)
bsObj = BeautifulSoup(response, 'lxml') # 解析獲取到的html
get_ip_list(bsObj)

運行結果

Running E:/Python_Test/Spider_Test/Cuiqingcai/Proxy_Test.py
共收集到了50個代理IP
['101.68.73.54:53281', '120.38.65.169:22166', '182.88.123.170:8123', '61.135.217.7:80', '120.76.55.49:8088', '182.90.100.76:8123', '220.166.242.180:8118', '110.73.4.165:8123', '115.46.72.238:8123', '61.145.49.144:808', '218.56.132.155:8080', '182.88.122.150:9797', '61.155.164.108:3128', ......]

代碼模塊(二)隨機獲取一個代理IP

根據模塊(一)的代碼修改而來,運行下面代碼可以隨機獲取一個西刺代理中的代理IP,以鍵值對形式返回。
示例代碼如下

from bs4 import BeautifulSoup
from urllib.request import urlopen
from urllib.request import Request

def get_ip_list(obj):
ip_text = obj.findAll('tr', {'class': 'odd'})
ip_list = []
for i in range(len(ip_text)):
ip_tag = ip_text[i].findAll('td')
ip_port = ip_tag[1].get_text() + ':' + ip_tag[2].get_text()
ip_list.append(ip_port)
# print("共收集到了{}個代理IP".format(len(ip_list)))
# print(ip_list)
return ip_list


def get_random_ip(bsObj):
ip_list = get_ip_list(bsObj)
import random
random_ip = 'http://' + random.choice(ip_list)
proxy_ip = {'http:': random_ip}
return proxy_ip


if __name__ == '__main__':
url = 'http://www.xicidaili.com/'
headers = {
'User-Agent': 'User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36'}
request = Request(url, headers=headers)
response = urlopen(request)
bsObj = BeautifulSoup(response, 'lxml')
random_ip = get_random_ip(bsObj)
print(random_ip) # 打印出獲取到的隨機代理IP

運行結果

Running E:/Python_Test/Spider_Test/Cuiqingcai/Proxy_Test.py
{'http:': 'http://116.28.106.165:6666'}


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com