路虽远 行则将至

Lee


  • 主页
  • 归档
  • 分类
  • 标签
  •   

站点访客数   人

站点浏览量   次

本页浏览量   次

© 2024 辣辣辣白菜

Theme Typography by Makito

Proudly published with Hexo

Python爬虫学习 - Xpath

Posted at 2021-06-23 学习笔记  Python 

简介

这里用到了 lxml-etree,同样是一个用于定位、获取内容的工具,解析 xpath。

安装

pip install lxml

导入

from lxml import etree

调用

Step1:将数据交给 etree

resp = requests.get(url)
html = etree.HTML(resp.text)

这里的 etree.HTML 代表解析从服务器获得的 html 数据

etree.[xxx]有很多种用法:

etree.HTML 代表解析从服务器获得的 html 数据

etree.parse 是从本地文件解析

etree.XML 可以解析 XML 文件

Step2:使用 Xpath

提取标签内的内容

在普通 xpath 后添加/text()

result = html.xpath("/html/body/ul/li/a/text()")

限制于第 N 个标签里提取内容

在需要索引第 n 个的标签后加上 [num] ,num=1 则是限制为第一个 xx 标签

result = html.xpath("/html/body/ul/li[1]/a/text()")

通过标签属性筛选内容

如下,与限制第 n 个标签的用法类似,筛选 href 属性为 xxx 的 a 标签,格式:[@property='xxx']

result = html.xpath('/html/body/ul/li/a[@href="http://google.com"]/text()')

提取标签属性的值

result = html.xpath('/html/body/ul/li/a/@href')

使用相对查找

li_list = html.xpath("/html/body/ul/li")
for li in li_list:
    li_a_content = li.xpath("./a/text()")
    li_a_href = li.xpath("./a/@href")
    print(li_a_content + li_a_href)

如这个例子,li_a_content = li.xpath("./a/text()")的意思就是在 li标签中查找 /a/text() ,而不是从全局的 html 代码中查找。

利用 Xpath 爬取猪八戒网的搜索结果页

import requests
from lxml import etree
url = "https://xingtai.zbj.com/search/f/?type=new&kw=ui"
keyword = url.split("=")[-1] #将搜索关键字提取出来,以“=”为分割,取最后一个
resp = requests.get(url)
html = etree.HTML(resp.text) #将页面代码交给etree
divs = html.xpath("/html/body/div[6]/div/div/div[2]/div[5]/div[1]/div") #将搜索结果的div列表存为divs
for div in divs:
    title = keyword.join(div.xpath('./div/div/a[1]/div[2]/div[2]/p/text()'))
    #提取搜索到的标题,因为标题将关键字做了高亮显示,所以xpath获取到的内容为“xxx,xxx”,利用join将关键字插入到被分割的地方,即可获得完整的标题
    price = div.xpath('.//*[@id="utopia_widget_70"]/a[1]/div[2]/div[1]/span[1]/text()')[0].strip("¥")
    #提取价格,需要用到列表,所以添加[0],并去掉前面的¥
    print(title + " " + price)

공유하기 

 이전 포스트: Python爬虫学习 - Requests进阶 다음 포스트: Python爬虫学习 - 初识Bs4 

站点访客数   人

站点浏览量   次

本页浏览量   次

© 2024 辣辣辣白菜

Theme Typography by Makito

Proudly published with Hexo