Python利用Xpath选择器爬取京东网商品信息
简介
本文主要介绍如何使用Python的Xpath模块实现京东网商品信息的爬取。Xpath是一种支持路径选择的查询语言,常用于处理XML、HTML以及其他结构化文档的数据。本文将使用Python的Xpath模块和requests模块对京东网的商品信息进行爬取。
前提条件
在开始本文之前,请确保您已经安装了以下软件:
- Python 3.x
- requests模块
- lxml模块
在安装了上述软件之后,您就可以开始编写代码了。
准备工作
首先,我们需要确定要爬取的京东商品页面的URL。在本文中,我们将使用京东网上的一个手机页面作为示例: https://list.jd.com/list.html?cat=9987,653,655&ev=exbrand%5F8555&sort=sort%5Ftotalsales15%5Fdesc&trans=1&JL=6_0_0#J_main
编写代码
- 导入必要的模块
先导入需要用到的Python模块:requests和lxml。其中,requests模块用于发送HTTP请求,lxml模块用于解析HTML文档。
import requests
from lxml import etree
- 发送HTTP请求并获取HTML文档
使用requests模块的get()方法发送HTTP请求,获取京东网的商品页面。然后,使用etree.HTML()方法将返回的HTML文档转换为etree对象。
url = 'https://list.jd.com/list.html?cat=9987,653,655&ev=exbrand%5F8555&sort=sort%5Ftotalsales15%5Fdesc&trans=1&JL=6_0_0#J_main'
response = requests.get(url)
html = etree.HTML(response.content)
- 使用Xpath解析HTML文档
通过分析京东网商品页面的HTML文档,我们可以使用Xpath选择器来获取我们所需的数据。例如,我们可以使用以下代码来获取商品的名称、价格以及评价数量:
items = html.xpath('//li[@class="gl-item"]')
for item in items:
title = item.xpath('.//div[@class="p-name"]/a/@title')[0]
price = item.xpath('.//div[@class="p-price"]/strong/i/text()')[0]
comment_count = item.xpath('.//div[@class="p-commit"]/strong/a/text()')[0]
在以上代码中,我们使用了Xpath选择器//li[@class="gl-item"]来选择所有包含商品信息的li元素。通过循环遍历每个li元素,我们可以使用Xpath选择器.//div[@class="p-name"]/a/@title来获取每个商品的名称,使用.//div[@class="p-price"]/strong/i/text()来获取每个商品的价格,使用.//div[@class="p-commit"]/strong/a/text()来获取每个商品的评价数量。
示例说明
下面,我们通过两个示例来说明如何使用本攻略中的代码。
示例1:获取第一页的商品信息
在代码中设置URL为:https://list.jd.com/list.html?cat=9987,653,655&ev=exbrand%5F8555&sort=sort%5Ftotalsales15%5Fdesc&trans=1&JL=6_0_0#J_main
然后,我们可以使用以下代码来获取第一页商品信息:
url = 'https://list.jd.com/list.html?cat=9987,653,655&ev=exbrand%5F8555&sort=sort%5Ftotalsales15%5Fdesc&trans=1&JL=6_0_0#J_main'
response = requests.get(url)
html = etree.HTML(response.content)
items = html.xpath('//li[@class="gl-item"]')
for item in items:
title = item.xpath('.//div[@class="p-name"]/a/@title')[0]
price = item.xpath('.//div[@class="p-price"]/strong/i/text()')[0]
comment_count = item.xpath('.//div[@class="p-commit"]/strong/a/text()')[0]
print(title, price, comment_count)
运行上述代码,即可获取第一页的商品信息。
示例2:获取所有商品信息
要获取所有商品信息,我们可以通过分类页数来访问每一页的商品信息。我们可以在URL中设置page参数来访问不同页。
以下是使用Python代码爬取所有页面商品信息的示例代码:
base_url = 'https://list.jd.com/list.html?cat=9987,653,655&ev=exbrand%5F8555&sort=sort%5Ftotalsales15%5Fdesc&trans=1&JL=6_0_0&page={}'
page = 1
while True:
url = base_url.format(page)
response = requests.get(url)
html = etree.HTML(response.content)
items = html.xpath('//li[@class="gl-item"]')
if not items:
break
for item in items:
title = item.xpath('.//div[@class="p-name"]/a/@title')[0]
price = item.xpath('.//div[@class="p-price"]/strong/i/text()')[0]
comment_count = item.xpath('.//div[@class="p-commit"]/strong/a/text()')[0]
print(title, price, comment_count)
page += 1
使用上述代码,即可获取所有页面的商品信息。通过设置page参数,我们可以访问不同页,并获取页码的所有商品信息。
结论
使用Python的Xpath模块,我们可以很容易地爬取京东网的商品信息。通过选择器,我们可以精确获取所需的数据。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python利用Xpath选择器爬取京东网商品信息 - Python技术站