手把手教你使用XPath爬取免费代理IP

Karen110
• 阅读 1302

大家好,我是霖hero。

前言

=====

可能有人说,初学者Python爬虫爬数据太难啦,构造正则表达式的时候,太烦琐了,眼睛都看花了,而且前一秒还可以愉快地爬取,下一秒IP就被封了,这还爬个屁啊,不爬了。哎,不要着急,这篇文章我们教你如何使用XPath来爬取快代理中的免费代理IP,告别眼花,告别IP被封的烦恼。

XPath

首先我们来简单了解一下XPath,想要了解更多XPath,我们可以打开W3school官方文档进行了解。

什么是 XPath?

  • XPath是XML路径语言(XML Path Language);

  • XPath 使用路径表达式在 XML 文档中进行导航;

  • XPath 包含一个标准函数库;

  • XPath 是 XSLT 中的主要元素;

  • XPath 是一个 W3C 标准;

XPath作用是什么?

  • XPath用来确定XML文档中某部分位置的语言

  • XPath在XML文档中查找信息的语言

  • XPath用于在XML文档中通过元素和属性进行导航。

XPath 含有超过 100 个内建的函数。这些函数用于字符串值、数值、日期和时间比较、节点和 QName 处理、序列处理、逻辑值等等。在Python爬虫中,我们完成可以使用XPath来做相应的信息抽取。

XPath——常用规则

简单了解一下XPath后,我们来看看它的常用规则,如下表:

表达式 描述
nodename 选取此节点的所有子节点
/ 从根节点选取
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置
. 选取当前节点
.. 选取当前节点的父节点
@ 选取属性

我们来简单说一个示例:

//title[@*]

这就是一个XPath规则,它代表选择选取所有带有属性的 title 元素。

好了,大概了解了XPath的常用规则和用法了,我们来添加一个Chrome浏览器的小插件——XPath Helper,这个小插件可以大大提高了我们使用XPath的效率。

XPath Helper的添加与使用

XPath Helper的添加

首先打开Chrome商店搜索XPath Helper,如下图所示:

手把手教你使用XPath爬取免费代理IP

点击方框2,将插件添加至Chrome中,如下图所示:

手把手教你使用XPath爬取免费代理IP

这里我们推荐点击下图的小图钉,更方便我们使用XPath Helper插件

手把手教你使用XPath爬取免费代理IP

这样XPath Helper插件就添加完毕了,接下来我们简单演示一下如何使用该插件。

XPath Helper的使用

首先我们打开今天要爬取的快代理网站并打开开发者工具,找到我们要爬取内容的节点,如下图所示:

手把手教你使用XPath爬取免费代理IP

然后打开我们添加的插件,并输入XPath规则,如下图所示:

手把手教你使用XPath爬取免费代理IP

我们根据了table节点信息,来构造了XPath规则,输入XPath规矩可以直接看到返回的是什么,这样我们就不需要每构成一次就在程序里运行看看能不能返回我们想要的值,这样大大提高我们的效率。

实战演练

爬取首页

我们首先打开快代理免费代理网站并打开开发者工具,如下图所示:

手把手教你使用XPath爬取免费代理IP

通过观察可以发现,页面的URL最后的那个数字就是页码,也就是我们进行翻页的重要参数,这里我们使用了page变量为我们翻页的参数,具体代码如下:

headers={  
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.106 Safari/537.36'  
}  
def get_page(page):  
    url='https://www.kuaidaili.com/free/inha/'+str(page)  
    response=requests.get(url,headers=headers)  
    #数据类型转换  
    html = parsel.Selector(response.text)  
    parse_page(html)  

首先我们构造了一个请求头,然后定义了一个get_page()方法,这里要注意的是,当我们获取了请求页面的文本数据时,要进行数据类型的转换,转换为XPath可以查找信息的HTML文本,也就是创建了一个parsel.Selector对象,转换后,我们就调用parse_page()方法,并传入html参数。

XPath规则提取内容

我们已经成功提取了网页的HTML文本,接下来我们开始利用XPath规则来提取想要的内容,首先我们要确定XPath规则提取内容的范围,如下图所示:

手把手教你使用XPath爬取免费代理IP

从图中我们可以看到table节点里包含我们要提取内容,然后我们使用XPath Helper插件来方便我们确定是否能准确提取目标内容,如下图所示:

手把手教你使用XPath爬取免费代理IP

图中的方框就是我们要提取内容的范围,确定范围后,我们确定提取内容对应的XPath规则,如下图所示:

手把手教你使用XPath爬取免费代理IP

好了,我们成功提取到了IP地址,经过观察,我们只要把图中左上角的方框中IP改为PORT,这样就可以提取到了端口号了,具体实现代码如下:

def parse_page(html):  
    #XPath的匹配范围  
    parse_list = html.xpath('//table[@class="table table-bordered table-striped"]/tbody/tr')  
    for tr in parse_list:  
        parse_lists = {}  




 http=tr.xpath('./td[@data-title="类型"]//text()').extract_first()  
        num=tr.xpath('./td[@data-title="IP"]//text()').extract_first()  
        port=tr.xpath('./td[@data-title="PORT"]//text()').extract_first()  
        parse_lists[http]=num+':'+port  
        time.sleep(0.1)  
        print(parse_lists)

要注意的是:

  • 我们在构造XPath规则时,如://td[@data-title="IP"],我们要将最前面的/改为.,否则只匹配页面的第一个内容;

  • 在XPath规则中,通过使用text()方法获取节点内部的文本,如在规则后面加//text();

  • 调用extract_first()返回的是一个string字符串,是list数组里面的第一个字符串。

最后我们通过构造一个parse_lists字典,来使我们的数据更好看。

循环遍历

我们使用一个for循环,来遍历翻页,具体代码为:

if __name__ == '__main__':  
    for page in range(1,3):  
        get_page(page)  

好了,这样我们就成功爬取了快代理的免费代理IP的前两页,我们可以根据需要来进行保存免费代理IP。

结果展示

手把手教你使用XPath爬取免费代理IP

代码获取

最后需要本文代码的小伙伴可以在后台回复”代理IP“关键字进行获取,有问题可以在公众号后台添加小编微信,小编帮助大家解决。

**-----**------**-----**---**** End **-----**--------**-----**-****

往期精彩文章推荐:

手把手教你使用XPath爬取免费代理IP

欢迎各位大佬点击链接加入群聊【helloworld开发者社区】:https://jq.qq.com/?_wv=1027&k=mBlk6nzX进群交流IT技术热点。

本文转自 https://mp.weixin.qq.com/s/3YnXJDaUQndibNJJiL5AXA,如有侵权,请联系删除。

点赞
收藏
评论区
推荐文章
python知道 python知道
1年前
《Python3网络爬虫开发实战》
提取码:1028内容简介 · · · · · ·本书介绍了如何利用Python 3开发网络爬虫,书中首先介绍了环境配置和基础知识,然后讨论了urllib、requests、正则表达式、Beautiful Soup、XPath、pyquery、数据存储、Ajax数据爬取等内容,接着通过多个案例介绍了不同场景下如何实现数据爬取,后介绍了pyspider框架、S
Karen110 Karen110
1年前
手把手教你用Pycharm连接远程Python环境
前言本次咱们来操作一下如何在Pycharm上,使用远程服务器上的Python环境。 为什么这样做?这个要从我的一次经历说起,有一次我帮朋友爬取一些东西,由于类别不同,分了几次爬取,这一次我写好规则之后,依然正常爬取,由于我本人比较善良,加上数据量目测并不是太多,并没有使用代理ip,并且将scpay的速度控制的比较慢,一般爬取时,一般也就几分钟而已,泡一杯咖
blmius blmius
1年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录 问题 用navicat导入数据时,报错: 原因这是因为当前的MySQL不支持datetime为0的情况。 解决修改sql\mode: sql\mode:SQL Mode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。 全局s
Aidan075 Aidan075
1年前
用python爬取4332条粽子数据进行分析,再送15盒粽子给大家
↑ 点击上方 “凹凸数据” 关注 + 星标  文章干货!有福利 !  端午节快要到了,甜咸粽子之争也快要拉开帷幕。 小五准备用Python爬取淘宝上的粽子数据并进行分析,看看有什么发现。(顺便送大家一波福利)爬虫爬取淘宝数据,本次采用的方法是:Selenium控制Chrome浏览器自动化操作\[1\]。其实我们还可以利用Ajax接口来构造链接,但是非常
Karen110 Karen110
1年前
有读者问我怎么爬App,我手把手教了他(多图警告)
前言大家好,我是Kuls。最近看见很多读者在说怎么抓取APP上的内容为此,我打算写一些关于爬取APP方面的文章,当然APP的爬取自然是要比网页要麻烦。但是只要我们把前期的工作做好,后面也会更加的顺利。今天这篇文章就是来教大家如何抓取到APP数据,用什么软件,怎么配置?Charles首先,我们来看看百度百科是怎么介绍这款软件的 是一个HTTP代理服务器,HTT
Aimerl0 Aimerl0
1年前
Python网络爬虫与信息提取
title: Python网络爬虫与信息提取date: 20201210 01:00:23tags: Pythoncategories: 学习笔记 写在前面 不知道写啥其实说实话[TOC] 网络爬虫之规则 安装requests库cmd 命令行打开输入pip3 install requests,等待即可简单测试,爬一下bkjwpythonimport requ
Wesley13 Wesley13
11个月前
50 行代码教你爬取猫眼电影 TOP100 榜所有信息
对于Python初学者来说,爬虫技能是应该是最好入门,也是最能够有让自己有成就感的,今天,恋习Python的手把手系列,手把手教你入门Python爬虫,爬取猫眼电影TOP100榜信息,将涉及到基础爬虫架构中的HTML下载器、HTML解析器、数据存储器三大模块: HTML下载器:利用requests模块下载HTML网页; HTML解析器:利用re正则表达
Stella981 Stella981
11个月前
Nginx反爬虫: 禁止某些User Agent抓取网站
一、概述 ==== 网站反爬虫的原因 -------- * 不遵守规范的爬虫会影响网站的正常使用 * 网站上的数据是公司的重要资产 * 爬虫对网站的爬取会造成网站统计数据的污染 常见反爬虫手段 ------- 1\. 根据 IP 访问频率封禁 IP 2\. 设置账号登陆时长,账号访问过多封禁 设置账号的登录限制,只有登录才能展现内容
Stella981 Stella981
11个月前
Python爬取网易云歌单
#### 基本配置: * Python版本:3.7 #### 相关模块: from urllib import parsefrom lxml import etreefrom urllib3 import disable_warningsimport requests #### 案例关键点: 使用单线程爬取,未登录,爬取网易云
Wesley13 Wesley13
11个月前
java实现根据起点终点和日期查询去哪儿网的火车车次和火车站点信息
**本文章为原创文章,转载请注明,欢迎评论和改正。** 一,分析   之前所用的直接通过HTML中的元素值来爬取一些网页上的数据,但是一些比较敏感的数据,很多正规网站都是通过json数据存储,这些数据通过HTML元素是爬取不到的,所以只能通过json数据的api接口来爬取数据。 二,网站处理   1,打开去哪儿网的网站https://train.qu
helloworld_45423603 helloworld_45423603
1星期前
网站反爬之封IP应对措施
作为爬虫工作者爬取数据是基本的技能,在日常获取数据的过程中遇到网站反爬也是家常事,网站的反爬方式有很多,今天我们重点来分析下封IP的行为。这种情况下大家都是很简单的使用代理IP就解决了,但是网上ip代理有很多家,到底选哪家好呢?这里推荐口碑很好的亿牛云