Python利用Xpath选择器爬取京东网商品信息


Posted in Python onJune 01, 2020

HTML文件其实就是由一组尖括号构成的标签组织起来的,每一对尖括号形式一个标签,标签之间存在上下关系,形成标签树;XPath 使用路径表达式在 XML 文档中选取节点。节点是通过沿着路径或者 step 来选取的。

Python利用Xpath选择器爬取京东网商品信息

首先进入京东网,输入自己想要查询的商品,向服务器发送网页请求。在这里小编仍以关键词“狗粮”作为搜索对象,之后得到后面这一串网址:

https://search.jd.com/Search?keyword=%E7%8B%97%E7%B2%AE&enc=utf-8,其中参数的意思就是我们输入的keyword,在本例中该参数代表“狗粮”,具体详情可以参考Python大神用正则表达式教你搞定京东商品信息。所以,只要输入keyword这个参数之后,将其进行编码,就可以获取到目标URL。之后请求网页,得到响应,尔后利用bs4选择器进行下一步的数据采集。

商品信息在京东官网上的部分网页源码如下图所示:

Python利用Xpath选择器爬取京东网商品信息

狗粮信息在京东官网上的网页源码

仔细观察源码,可以发现我们所需的目标信息是存在<li data-sku="*****" class="gl-item">标签下的,那么接下来我们就像剥洋葱一样,一层一层的去获取我们想要的信息。

通常URL编码的方式是把需要编码的字符转化为%xx的形式,一般来说URL的编码是基于UTF-8的,当然也有的于浏览器平台有关。在Python的urllib库中提供了quote方法,可以实现对URL的字符串进行编码,从而可以进入到对应的网页中去。

Python利用Xpath选择器爬取京东网商品信息

在线复制Xpath表达式

很多小伙伴都觉得Xpath表达式很难写,其实掌握了基本的用法也就不难了。在线复制Xpath表达式如上图所示,可以很方便的复制Xpath表达式。但是通过该方法得到的Xpath表达式放在程序中一般不能用,而且长的没法看。所以Xpath表达式一般还是要自己亲自上手。

直接上代码,利用Xpath去提取目标信息,如商品的名字、链接、图片和价格,具体的代码如下图所示:

Python利用Xpath选择器爬取京东网商品信息

爬虫代码

在这里,小编告诉大家一个Xpath表达式匹配技巧。之前看过好几篇文章,大佬们都推荐Xpath表达式使用嵌套匹配的方式。在本例中,首先定义items,如下所示:

items = selector.xpath('//li[@class="gl-item"]')

之后通过range函数,逐个从网页中进行匹配目标信息,而不是直接通过复制Xpath表达式的方式一步到位。希望小伙伴们以后都可以少入这个坑~~

最后得到的效果图如下所示:

Python利用Xpath选择器爬取京东网商品信息

最终效果图

新鲜的狗粮再一次出炉咯~~~

小伙伴们,有没有发现利用Xpath来获取目标信息比正则表达式要简单一些呢?

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Mac OS X10.9安装的Python2.7升级Python3.3步骤详解
Dec 04 Python
Python实现多行注释的另类方法
Aug 22 Python
python基于xml parse实现解析cdatasection数据
Sep 30 Python
详解Python中的各种函数的使用
May 24 Python
如何利用Boost.Python实现Python C/C++混合编程详解
Nov 08 Python
python安装numpy和pandas的方法步骤
May 27 Python
Python使用pymysql模块操作mysql增删改查实例分析
Dec 19 Python
浅谈python元素如何去重,去重后如何保持原来元素的顺序不变
Feb 28 Python
Python多线程通信queue队列用法实例分析
Mar 24 Python
Python 字符串池化的前提
Jul 03 Python
python爬虫用mongodb的理由
Jul 28 Python
python定义具名元组实例操作
Feb 28 Python
Python用类实现扑克牌发牌的示例代码
Jun 01 #Python
在pycharm中使用matplotlib.pyplot 绘图时报错的解决
Jun 01 #Python
Python基于BeautifulSoup爬取京东商品信息
Jun 01 #Python
k-means 聚类算法与Python实现代码
Jun 01 #Python
python 代码实现k-means聚类分析的思路(不使用现成聚类库)
Jun 01 #Python
python如何写出表白程序
Jun 01 #Python
python中os包的用法
Jun 01 #Python
You might like
PHP个人网站架设连环讲(三)
2006/10/09 PHP
PHP STRING 陷阱原理说明
2010/07/24 PHP
PHP spl_autoload_register实现自动加载研究
2011/12/06 PHP
ThinkPHP在新浪SAE平台的部署实例
2014/10/31 PHP
php中switch语句用法详解
2015/08/17 PHP
ThinkPHP 3.2.3实现页面静态化功能的方法详解
2017/08/03 PHP
php数据序列化测试实例详解
2017/08/12 PHP
ExtJS4 组件化编程,动态加载,面向对象,Direct
2011/05/12 Javascript
javascript跟随滚动效果插件代码(javascript Follow Plugin)
2013/08/03 Javascript
深入学习jQuery Validate表单验证(二)
2016/01/18 Javascript
Javascript的表单与验证-非空验证
2016/03/18 Javascript
详谈JS中实现种子随机数及作用
2016/07/19 Javascript
Node.js连接MongoDB数据库产生的问题
2017/02/08 Javascript
JS实现的二叉树算法完整实例
2017/04/06 Javascript
ECMAscript 变量作用域总结概括
2017/08/18 Javascript
ECharts地图绘制和钻取简易接口详解
2019/07/12 Javascript
windows实现npm和cnpm安装步骤
2019/10/24 Javascript
nodejs脚本centos开机启动实操方法
2020/03/04 NodeJs
jQuery实现查看图片功能
2020/12/01 jQuery
JavaScript实现移动小精灵的案例代码
2020/12/12 Javascript
[03:38]TI4西雅图DOTA2前线报道 71专访
2014/07/08 DOTA
[00:36]DOTA2风云人物相约完美“圣”典 12月17日不见不散
2016/11/30 DOTA
python定时检查启动某个exe程序适合检测exe是否挂了
2013/01/21 Python
Python排序搜索基本算法之堆排序实例详解
2017/12/08 Python
对python mayavi三维绘图的实现详解
2019/01/08 Python
Django项目使用CircleCI的方法示例
2019/07/14 Python
Python 3.8 新功能来一波(大部分人都不知道)
2020/03/11 Python
解决reload(sys)后print失效的问题
2020/04/25 Python
Python使用urlretrieve实现直接远程下载图片的示例代码
2020/08/17 Python
分布式全文检索引擎ElasticSearch原理及使用实例
2020/11/14 Python
详解Canvas实用库Fabric.js使用手册
2019/01/07 HTML / CSS
Linux如何修改文件和文件夹的权限
2012/06/27 面试题
平面设计师工作职责范文
2013/12/03 职场文书
小学中队活动总结
2015/05/11 职场文书
2015公司年度工作总结
2015/05/14 职场文书
Java比较两个对象中全部属性值是否相等的方法
2021/08/07 Java/Android