Python爬虫-xpath

说明

再说明插件推荐语法讲述举栗子代码里使用实战句子迷划重点

说明

关于Python爬虫请求数据方面的知识点基本讲完,但请求到数据之后呢?

当然是提取数据,抓出对我们有价值的内容是整个爬虫流程的关键步骤之一。先下流行方法有:xapth,BeautifulSoup,正则,PyQuery。如无意外,我会一一笔记下来。今天说说我的最爱吧。

——xpath

再说明

一般情况下,我们爬到的是整个静态网页页面,得到的是html源码,包含各种标签。但那些标签并非我们想要,如:

我们只需要里边的文字,这种时候就可以xpath了。如上所说,类似的解决方法包括正则以及BeautifulSoup,前者难度较大,后者广受追捧。从解析速度上说,正则最快,xpath次之,BeautifulSoup再次之;从上手难度来说,BeautifulSoup最易,xpath次之,正则再次之。综合考虑,我偏爱xpath。也有人推崇PyQurey,认为比起繁琐的“美丽汤”语法,它短小精悍,而且如果使用者是前端工程师,掌握起来不需要耗费任何学习成本。这大概因为PyQurey的语法源于JQurey吧。

插件推荐

基于chrome浏览器的插件,它可以让我们提前看到提取效果,使用快捷键

语法讲述

只说常用的:

从根节点开始

从任意位置开始

div标签下的p标签

提取标签中某个属性的值

确定带有a属性且值为b的div标签

如果需要取出标签中的文字

模糊查询

多个相同标签用索引方式定位,表示div下div下的第3个a标签 :

举栗子

以腾讯社招为例

可以发现tr的class值不同,而属性href只有数字部分不同,此时想要获取a标签中的字符串两种方法

a) 模糊查询

//tbody/tr/td/a[contains(@href, "position")]

b) “|”或

//tbody/tr[@class="even"]//a | //tbody/tr[@class="odd"]//a

Alt text

代码里使用

说明:返回的result是列表类型,如果没有提取到符合规则的信息会返回空列表

实战句子迷

页面呈现如下,要求:获取每个句子,以及“喜欢”量,以及“评论”数

结果:

划重点

需要的总结:

原本没打算总结的。原本只是做一次用xpath提取数据的示范。以为像句子迷这样的小网站爬起来会很容易,确实是,却也不是。

网页静态呈现,需要的数据都可以通过xpath直接拿到。主要遇到的问题是该网站设置了重定向,就是说直接访问我设置的url地址时,会被重定向到另一个地址去。根据xpath没拿到返回值这一现象,我打印了实际请求地址,结果显示的确被重定向了。我当然第一反应关闭了 get请求中的重定向开关。这之后拿不到数据,状态码返回302。特地百度一下,302是暂时性重定向的意思,它的危害性比较大,主要是可能被黑客利用进行url劫持,也可能恶意刷网站排名,被建议尽量不用或少用。

正确处理方式:请求报文头中一定要加值。老实说,之前也爬过一些大型网站,Referer值从来不带的,这次是长知识了。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180604G11KRT00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

同媒体快讯

扫码关注腾讯云开发者

领取腾讯云代金券