找個代理網站把代理ip爬下來做代理池 - Python
阿新 • • 發佈:2021-11-08
本文內容僅供學習交流使用,不具有任何商業用途,如有問題請即時聯絡我處理。--Python逐夢者。
某度上很多免費代理的網站,今天嘗試來爬一個試著做下代理池。
程式碼開始:
1 """ 2 找一個免費代理,然後將它搭建成爬蟲的代理池 3 """ 4 import requests 5 import csv 6 import time 7 import parsel 8 import random 9 10 # f = open('89免費代理.csv', mode='a', encoding='utf-8-sig', newline='') 11 # csvWriter = csv.DictWriter(f, fieldnames=[12 # 'ip地址', 13 # '埠', 14 # '位置', 15 # 'isp服務商', 16 # ]) 17 # csvWriter.writeheader() # 將頭寫入 18 19 headers = { 20 "cookie": "Hm_lvt_f9e56acddd5155c92b9b5499ff966848=1636356943; Hm_lpvt_f9e56acddd5155c92b9b5499ff966848=1636356954", 21 "referer": "https://www.xxip.cn/", 22 "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36", 23 } 24 25 ip_list = [] 26 port_list = [] 27 28 # 多頁爬取 29 for page in range(1, 51): # 爬五十頁 30 time.sleep(random.randint(2, 10)) 31 print("==========開始爬取第{}頁==========".format(page))32 # 定義url 33 url = f'https://www.xxip.cn/index_{page}.html' 34 # 開始請求 35 response = requests.get(url=url, headers=headers) 36 if response.status_code == 200: 37 print("資料獲取成功,開始解析!") 38 # 選擇器,要提取ip和埠以供檢查使用 39 selector = parsel.Selector(response.text) 40 # 選取ip列表 41 lis = selector.css('.layui-table tbody tr') 42 # 讀取列表 43 for li in lis: 44 ip = li.css('td:nth-child(1)::text').get().strip() # ip地址 45 port = li.css('td:nth-child(2)::text').get().strip() # 埠 46 location = li.css('td:nth-child(3)::text').get().strip() # 位置 47 isp = li.css('td:nth-child(4)::text').get().strip() # 運營商 48 ip_list.append(ip) # 測試用 49 port_list.append(port) # 測試用 50 # print(ip, port, location, isp, sep='|') 51 # # 寫入到csv文件 52 # dit = { 53 # 'ip地址':ip, 54 # '埠':port, 55 # '位置':location, 56 # 'isp服務商':isp, 57 # } 58 # csvWriter.writerow(dit) # 逐行寫入到csv文件 59 60 # print(ip_list, port_list) 61 available_ips = [] # 可用ip 62 # 開始測試第page頁的ip 63 print("=====開始測試{}頁的ip。=====".format(page)) 64 for ip, port in zip(ip_list,port_list): 65 # 開始組建代理 66 proxies = { 67 'http':ip + ":" + port 68 } 69 # print(proxies) 列印看是否符合預期 70 try: 71 res = requests.get('https://www.baidu.com', proxies=proxies, timeout=5) 72 if res.status_code == 200: # 狀態碼為200則為響應成功 73 print(ip + "可用!") 74 available_ips.append(ip) 75 else: 76 print(ip + "無響應!") 77 except: 78 pass 79 80 # 接下來儲存可用ip 81 with open('89免費代理.csv', mode='a', encoding='utf-8-sig', newline='') as f: 82 csvWriter = csv.writer(f) # 寫入器 83 csvWriter.writerow([ip, port]) # 將ip和埠進行儲存 84 print("====第{}頁的的可用ip儲存成功!====".format(page))
爬完部分截圖如下:
逐夢很累,堅持加油。--一葉孤城。