html获取当前ip_前天,爬取某网站导致IP被封后,我干了这件事……

17fdb0fa448854309f9a1319a74220b1.gif

-点击蓝字关注我们

2e1d47bbd67865d03fc262dbae64b1e5.png 人生苦短,我用Python 前天,本人在爬取某网站时,第一次遇到IP被封的情况,等了几个小时之后,还是不行。最后,迫于无奈,还是请出了大招,使用代理IP。今天,闲来无事,本人爬取了快代理网站上 5 万多条免费高匿名代理IP。 首先,我们进入网站免费代理页面,可以看到该网站目前共有免费代理IP 3482 页。免费代理IP首页的url地址为:https://www.kuaidaili.com/free/inha/。 c1528b29fa0281f856f6493aeb9a73f6.png 你可能会疑惑,我们的目标是爬取三千多页的代理IP信息,上面只提到了首页的url地址,如何知道其余页面的url地址呢?这时,不用着急,我们再点开第二页,可以看到第二页的url地址为https://www.kuaidaili.com/free/inha/2/,仔细观察就会发现,该url地址结尾有一个数字 2 ,你可能会想,第三页会不会就是3呢?事实上,正是如此,后面的以此类推…… f7bebe86da3dabe2293e2f890ae559b9.png 这样,从第 2 页至最后一页的url地址所符合的规律我们已经找到了。其实,这种情况是很常见的,而且,首页url地址也可以是这样的,即url地址https://www.kuaidaili.com/free/inha/1/和https://www.kuaidaili.com/free/inha/对应的是同一页面。知道了这一点,我们就可以使用format()方法轻松写出每一页的url地址,代码如下:
1url = 'https://www.kuaidaili.com/free/inha/{}/'.format(str(i))
好了,上面重要的问题已经分析完了,下面我们开始分析页面内容并尝试爬取所需信息。我们的目标是爬取每一页表格内的所有内容,下面以第一页内容为例分析。跟之前一样,我们先右键检查,可以看到如下页面: cb6ddd04803033dfd5e17f8fd0ce48e6.png 通过观察发现,可以使用正则表达式re模块的findall()方法匹配相关信息,下面我们开始编写程序。 首先,我们需要导入所需的库,代码如下:
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 好了,以上就是本期内容,谢谢您的阅读! 觉得不错?支持一下呗! 往期推荐: Python抓取2020校友会中国工业大学排名 Python抓取守望先锋所有英雄图片 Python爬取网络图片详解

ea4fa482221feb39872ef945e372051d.gif

作者 | 绿皮长条瓜 编辑 | 绿皮长条瓜 QQ交流群 | 1073029712 我就知道你 在看
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值