![17fdb0fa448854309f9a1319a74220b1.gif](https://img-blog.csdnimg.cn/img_convert/17fdb0fa448854309f9a1319a74220b1.gif)
-点击蓝字关注我们
![2e1d47bbd67865d03fc262dbae64b1e5.png](https://img-blog.csdnimg.cn/img_convert/2e1d47bbd67865d03fc262dbae64b1e5.png)
![c1528b29fa0281f856f6493aeb9a73f6.png](https://img-blog.csdnimg.cn/img_convert/c1528b29fa0281f856f6493aeb9a73f6.png)
![f7bebe86da3dabe2293e2f890ae559b9.png](https://img-blog.csdnimg.cn/img_convert/f7bebe86da3dabe2293e2f890ae559b9.png)
1url = 'https://www.kuaidaili.com/free/inha/{}/'.format(str(i))
好了,上面重要的问题已经分析完了,下面我们开始分析页面内容并尝试爬取所需信息。我们的目标是爬取每一页表格内的所有内容,下面以第一页内容为例分析。跟之前一样,我们先右键检查,可以看到如下页面:
![cb6ddd04803033dfd5e17f8fd0ce48e6.png](https://img-blog.csdnimg.cn/img_convert/cb6ddd04803033dfd5e17f8fd0ce48e6.png)
1# 导入相关模块库2import requests3import re4import os5import time
下面我们尝试编写一个函数,用于匹配单个免费代理页面的所有信息。
1def get_ipinfo(url): 2 '''定义一个函数,用于获取单个页面的IP代理信息''' 3 r = requests.get(url, headers={'user-agent':'Mozilla/5.0'}) # 获取网页内容 4 html = r.text # 获取http响应内容的字符串形式 5 6 # 利用正则表达式匹配IP、PORT、匿名度、类型、位置、响应速度、最后验证时间信息 7 ip = re.findall('((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))', html) # 匹配IP信息 8 port = re.findall('(\d+)', html) # 匹配端口号信息 9 anonymity = re.findall('([\u4e00-\u9fa5]+)', html) # 匹配匿名度信息10 genre = re.findall('(.+)', html) # 匹配类型信息11 position = re.findall('([\u4e00-\u9fa5 ]+)', html) # 匹配位置信息12 speed = re.findall('(.+)', html) # 匹配响应速度信息13 time = re.findall('(.+)', html) # 匹配验证时间信息1415 ipinfo = zip(ip, port, anonymity, genre, position, speed, time) # 将本页面匹配信息压缩,写入csv文件16 return ipinfo
匹配到信息之后,就需要将该页信息写入到一个csv文件中,下面我们将通过编写一个函数实现该功能,代码如下:
1def write_ipinfo(ipinfo, page): 2 '''定义一个函数,将IP代理信息写入到指定的csv文件中''' 3 path = 'C:\\Users\\Lenovo\\Desktop\\IP代理' # 待写入文件存储目录 4 if not os.path.exists(path): # 判断桌面是否有名称为“IP代理”的文件夹,如果没有,就创建它 5 os.mkdir(path) 6 7 # 将匹配信息写入csv文件 8 with open(path + '//代理IP.csv', 'a' ,newline='') as f: 9 writer = csv.writer(f)10 if page == 1:11 writer.writerow(['IP', 'PORT', '匿名度', '类型', '位置', '响应速度', '最后验证时间']) # 写入表头信息12 writer.writerows(ipinfo) # 写入单个页面匹配信息
通过上述两个函数,我们已经能够实现对某个页面信息的爬取和保存,下面只需要遍历每一页的url地址就可以爬取所有页面的免费代理IP信息,代码如下:
1if __name__ == '__main__':2 for page in range(3482):3 url = 'https://www.kuaidaili.com/free/inha/{}/'.format(str(page+1))4 ipinfo = get_ipinfo(url)5 write_ipinfo(ipinfo, page+1)6 time.sleep(1)
好了,利用上述程序,我们已经实现了免费代理IP的爬取工作,共计爬取代理IP信息 5万多条,下面是爬取的部分内容:
![36e86ba75e56541f80fa96fc2e1a4055.png](https://img-blog.csdnimg.cn/img_convert/36e86ba75e56541f80fa96fc2e1a4055.png)