前天,本人在爬取某网站时,第一次遇到IP被封的情况,等了几个小时之后,还是不行。最后,迫于无奈,还是请出了大招,使用代理IP。今天,闲来无事,本人爬取了快代理网站上 5 万多条免费高匿名代理IP。
首先,我们进入网站免费代理页面,可以看到该网站目前共有免费代理IP 3482 页。免费代理IP首页的url地址为:https://www.kuaidaili.com/free/inha/。

你可能会疑惑,我们的目标是爬取三千多页的代理IP信息,上面只提到了首页的url地址,如何知道其余页面的url地址呢?这时,不用着急,我们再点开第二页,可以看到第二页的url地址为https://www.kuaidaili.com/free/inha/2/,仔细观察就会发现,该url地址结尾有一个数字 2 ,你可能会想,第三页会不会就是3呢?事实上,正是如此,后面的以此类推……

这样,从第 2 页至最后一页的url地址所符合的规律我们已经找到了。其实,这种情况是很常见的,而且,首页url地址也可以是这样的,即url地址https://www.kuaidaili.com/free/inha/1/和https://www.kuaidaili.com/free/inha/对应的是同一页面。知道了这一点,我们就可以使用format()方法轻松写出每一页的url地址,代码如下:

url = 'https://www.kuaidaili.com/free/inha/{}/'.format(str(i))

好了,上面重要的问题已经分析完了,下面我们开始分析页面内容并尝试爬取所需信息。我们的目标是爬取每一页表格内的所有内容,下面以第一页内容为例分析。跟之前一样,我们先右键检查,可以看到如下页面:

通过观察发现,可以使用正则表达式re模块的findall()方法匹配相关信息,下面我们开始编写程序。
首先,我们需要导入所需的库,代码如下:

# 导入相关模块库
import requests
import re
import os
import time

下面我们尝试编写一个函数,用于匹配单个免费代理页面的所有信息。

 def get_ipinfo(url):'''定义一个函数,用于获取单个页面的IP代理信息'''r = requests.get(url, headers={'user-agent':'Mozilla/5.0'}) # 获取网页内容html = r.text # 获取http响应内容的字符串形式# 利用正则表达式匹配IP、PORT、匿名度、类型、位置、响应速度、最后验证时间信息ip = re.findall('<td data-title="IP">((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))</td>', html) # 匹配IP信息port = re.findall('<td data-title="PORT">(\d+)</td>', html) # 匹配端口号信息anonymity = re.findall('<td data-title="匿名度">([\u4e00-\u9fa5]+)</td>', html) # 匹配匿名度信息genre = re.findall('<td data-title="类型">(.+)</td>', html) # 匹配类型信息position = re.findall('<td data-title="位置">([\u4e00-\u9fa5 ]+)</td>', html) # 匹配位置信息speed = re.findall('<td data-title="响应速度">(.+)</td>', html) # 匹配响应速度信息time = re.findall('<td data-title="最后验证时间">(.+)</td>', html) # 匹配验证时间信息ipinfo = zip(ip, port, anonymity, genre, position, speed, time) # 将本页面匹配信息压缩,写入csv文件return ipinfo

匹配到信息之后,就需要将该页信息写入到一个csv文件中,下面我们将通过编写一个函数实现该功能,代码如下:

 def write_ipinfo(ipinfo, page):'''定义一个函数,将IP代理信息写入到指定的csv文件中'''path = 'C:\\Users\\Lenovo\\Desktop\\IP代理' # 待写入文件存储目录if not os.path.exists(path): # 判断桌面是否有名称为“IP代理”的文件夹,如果没有,就创建它os.mkdir(path)# 将匹配信息写入csv文件with open(path + '//代理IP.csv', 'a' ,newline='') as f:writer = csv.writer(f)if page == 1:writer.writerow(['IP', 'PORT', '匿名度', '类型', '位置', '响应速度', '最后验证时间']) # 写入表头信息writer.writerows(ipinfo) # 写入单个页面匹配信息

通过上述两个函数,我们已经能够实现对某个页面信息的爬取和保存,下面只需要遍历每一页的url地址就可以爬取所有页面的免费代理IP信息,代码如下:

if __name__ == '__main__':for page in range(3482):url = 'https://www.kuaidaili.com/free/inha/{}/'.format(str(page+1))ipinfo = get_ipinfo(url)write_ipinfo(ipinfo, page+1)time.sleep(1)

好了,利用上述程序,我们已经实现了免费代理IP的爬取工作,共计爬取代理IP信息 5万多条,下面是爬取的部分内容:

好了,以上就是本期内容,谢谢您的阅读!
觉得不错?扫描下方二维码,关注本人公众号【Python无忧】,了解更多,谢谢您的支持!

Python爬取快代理相关推荐

  1. python爬取快代理IP并测试IP的可用性

    用到的网站https://www.kuaidaili.com/,免费的IP很不稳定,随时会挂,有需求的还是购买付费IP比较稳 import requests from urllib import pa ...

  2. 爬虫爬取快代理网站动态IP

    爬虫爬取快代理网站动态IP import requests, time from lxml import etree import time import randomcookie = "& ...

  3. Scrapy-Redis 爬取快代理免费

    前面写过使用scrapy爬取快代理的免费ip 接下来使用的是基于Redis的分布式scrapy爬取快代理免费ip 1.准备好Redis 如何安装和使用Redis这里就不做介绍了,没有安装的可以参考我之 ...

  4. Python 爬取可用代理 IP

    2019独角兽企业重金招聘Python工程师标准>>> 通常情况下爬虫超过一定频率或次数,对应的公网 IP 会被封掉,为了能稳定爬取大量数据,我们一般从淘宝购买大量代理ip,一般 1 ...

  5. python爬取国内代理ip_Python语言爬取代理IP

    本文主要向大家介绍了Python语言爬取代理IP,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. #!/usr/bin/env python #-*-coding=utf-8 -* ...

  6. python爬取国内代理ip_【python】国内高匿代理爬取,并验证代理ip有效性

    运行环境:python 3.7.3 所需库: 1. requests 2. lxml 3. time 4. multiprocessing 5. sys 目的:构建自己的代理ip池,针对封ip型反爬虫 ...

  7. Python 抓取 快代理、西刺代理 、西拉代理等等 构建免费代理池

    import reimport requests from lxml import etreeheaders = {"User-Agent": "Mozilla/5.0 ...

  8. Python爬虫实战013:Python爬取免费代理ip

    import requests import time import random from lxml import etree from fake_useragent import UserAgen ...

  9. python爬取高匿代理IP(再也不用担心会进小黑屋了)

    一起进步 为什么要用代理IP 很多数据网站,对于反爬虫都做了一定的限制,这个如果写过一些爬虫程序的小伙伴应该都深有体会,其实主要还是IP进了小黑屋了,那么为了安全,就不能使用自己的实际IP去爬取人家网 ...

最新文章

  1. 使用第三方《UITableView+FDTemplateLayoutCell》自动计算UITableViewCell高度(Masonry约束)...
  2. JavaDoc命令使用说明
  3. 射频通路 隔直_2.4G射频双向功放电路的设计与制作
  4. C#LeetCode刷题-广度优先搜索
  5. Java 并发(JUC 包-05)
  6. python3 字符串比较_Python3 字符串
  7. JDBCAPI简介(二)
  8. Element-UI合集之el-select
  9. 在消费决策上,读懂当代年轻人的B面!
  10. java排序之选择排序
  11. 文件的后缀名怎样重命名,重命名为大写字母
  12. java进阶--深入理解Java自动装箱拆箱机制(Autoboxing and unboxing)
  13. bigDecimal除法取整数
  14. MySQL创建用户,更改密码
  15. 第1题:设计一个学生学籍管理系统
  16. JavaScript 按字母顺序排列对象数组
  17. 转:PL/0语言词法及语法分析系统的设计与实现
  18. 冒泡排序详解及代码(Java)
  19. 我国计算机科学的发展源头,计算机科学与技术概论论文正稿.doc
  20. 从零开始带你成为JVM实战高手

热门文章

  1. LINUX环境下各种网络限速
  2. CorelDRAW 条码原来是这样么容易制作出来的呀领教了吧
  3. 锻造工程总承包五大能力
  4. 卖期权的时候,我们在卖什么?
  5. 互联网摸鱼日报(2022-10-07)
  6. 已知:切比雪夫多项式如下:编写一段程序,输入n,x,并将0-n的所有Tn(x)的值输出导到文件tdat.txt中。
  7. SQL Server 2012导入Excel文件时 未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序
  8. GitHub推出开发者赚钱新利器,100%全给开发者!
  9. 自定义组件-onFinishInflateonSizeChanged
  10. 防火墙硬件_硬件防火墙提供的保护