找个代理网站把代理ip爬下来做代理池 - Python

本文内容仅供学习交流使用,不具有任何商业用途,如有问题请即时联系我处理。--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))

爬完部分截图如下:

 逐梦很累,坚持加油。--一叶孤城。

posted @ 2021-11-08 17:19  、一叶孤城  阅读(79)  评论(0编辑  收藏  举报