楚江數據:創建爬蟲代理ip池

在爬取網站信息的過程當中,有些網站爲了防止爬蟲,可能會限制每一個ip的訪問速度或訪問次數。對於限制訪問速度的狀況,咱們能夠經過time.sleep進行短暫休眠後再次爬取。對於限制ip訪問次數的時候咱們須要經過代理ip輪換去訪問目標網址。因此創建並維護好一個有效的代理ip池也是爬蟲的一個準備工做。
網上提供免費代理ip的網址不少,下面咱們以西刺網站爲例來創建一個有效的代理ip池。
項目流程:編程

第一步:構造請求代理ip網站連接
def get_url(url): # 國內高匿代理的連接 url_list = [] for i in range(1,100): url_new = url + str(i) url_list.append(url_new) return url_list
get_url :生成要爬取目標網址的連接
第二步:獲取網頁內容
def get_content(url): # 獲取網頁內容 user_agent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 Safari/537.36 SE 2.X MetaSr 1.0' headers = {'User-Agent': user_agent} req = urllib.request.Request(url=url, headers=headers) res = urllib.request.urlopen(req) content = res.read() return content.decode('utf-8')
get_content:接受的參數是傳入的目標網站連接
第三步:提取網頁中ip地址和端口號信息
def get_info(content): # 提取網頁信息 / ip 端口 datas_ip = etree.HTML(content).xpath('//table[contains(@id,"ip_list")]/tr/td[2]/text()') datas_port = etree.HTML(content).xpath('//table[contains(@id,"ip_list")]/tr/td[3]/text()') with open("data.txt", "w") as fd: for i in range(0,len(datas_ip)): out = u"" out += u"" + datas_ip[i] out += u":" + datas_port[i] fd.write(out + u"n") # 全部ip和端口號寫入data文件
get_info:接收從get_content函數傳來的網頁內容,並使用etree解析出ip和端口號,將端口號和ip寫入data.
第四步:驗證代理ip的有效性
def verif_ip(ip,port): # 驗證ip有效性 user_agent ='Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 Safari/537.36 SE 2.X MetaSr 1.0' headers = {'User-Agent':user_agent} proxy = {'http':'http://%s:%s'%(ip,port)} print(proxy) proxy_handler = urllib.request.ProxyHandler(proxy) opener = urllib.request.build_opener(proxy_handler) urllib.request.install_opener(opener) test_url = "https://www.baidu.com/" req = urllib.request.Request(url=test_url,headers=headers) time.sleep(6) try: res = urllib.request.urlopen(req) time.sleep(3) content = res.read() if content: print('that is ok') with open("data2.txt", "a") as fd: # 有效ip保存到data2文件夾 fd.write(ip + u":" + port) fd.write("n") else: print('its not ok') except urllib.request.URLError as e: print(e.reason)
verif_ip:使用ProxyHandler創建代理,使用代理ip訪問某網址,查看是否獲得響應。如數據有效,則保存到data2.txt文件
最後:調用各個函數
if name == '__main__': url = 'http://www.xicidaili.com/nn/' url_list = get_url(url) for i in url_list: print(i) content = get_content(i) time.sleep(3) get_info(content) with open("dali.txt", "r") as fd: datas = fd.readlines() for data in datas: print(data.split(u":")[0]) # print('%d : %d'%(out[0],out[1])) verif_ip(data.split(u":")[0],data.split(u":")[1])
獲得爬取結果微信

【楚江數據】團隊提供網站、手機APP(包括電商、社交網站、公衆號、論壇及客戶提供的其餘類型)爬蟲定製開發和數據(文本、圖片、電話郵箱、文檔等)批量採集服務。不用學編程,不用寫代碼,咱們直接交付採集好的數據或者編寫好的程序。
微信:p02721606
官方網站http://www.chujiangdata.comapp

轉載知乎;函數

相關文章
相關標籤/搜索