python爬虫lxml库解析xpath网页过程示例
作者:苏凉.py 发布时间:2021-10-06 20:01:54
前言
在我们抓取网页内容的时候,通常是抓取一整个页面的内容,而我们仅仅只是需要该网页中的部分内容,那该如何去提取呢?本章就带你学习xpath插件的使用。去对网页的内容进行提取。
(一)xpath是什么
xpath是一门在XML文档中查找信息的语言,xpath可用来在XML 文档中对元素和属性进行遍历,主流的浏览器都支持xpath,因为html页面在DOM中表示为XHTML文档。
xpath语言是基于XML文档的树结构,并提供了浏览树的能力,通过多样的标准来选择节点。从而找到我们想要的数据。
首先我们需要在chrome浏览器中安装xpath插件。
可以到谷歌应用商店搜索下载。
安装好之后重启浏览器按下快捷键Ctrl +Shift+X网页上会出现黑色的框就表示成功啦!
(二)xpath的基本语法 路径查询。
// : 查找所有子孙节点,不考虑层级关系
/ : 找直接子节点
谓词查询
//div[@id]
//div[@id=“maincontent”]
属性查询
//@class
模糊查询
//div[contains(@id, “he”)]
//div[starts -with(@id, “he”)]
内容查询
//div/h1/text()
(三) lxml库
lxml是python的一个解析库,支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高。
在使用前我们需要在pycharm里安装lxml库。
在终端输入指令即可:
pip install lxml -i https://pypi.douban.com/simple
注意:必须安装在我们当前所使用的环境下
(四)lxml库的使用 导入lxml.etree
from lxml import etree
解析本地文件
tree = etree.parse(xxx.html) #解析本地文件
解析服务器响应文件
tree = etree.HTML(content) #解析网页文件
返回结果
result = tree.xpath('//div/div/@aria-label')[0]
注:xpath返回的结果类型为列表,当结果有许多值时我们可以使用下标来取我们想要的值。
(五)实例演示
import urllib.request
from lxml import etree
import urllib.parse
url ='https://www.baidu.com/s?'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36'
}
cre_data = {
'wd' : '这里写关键词'
}
data = urllib.parse.urlencode(cre_data)
url = url + data
request = urllib.request.Request(url = url , headers = headers )
response = urllib.request.urlopen(request)
content = response.read().decode('utf-8')
print(content)
# tree = etree.parse(xxx.html) #解析本地文件
tree = etree.HTML(content) #解析网页文件
result = tree.xpath('//div/div/@aria-label')[0]
print(result)
来源:https://blog.csdn.net/weixin_46277553/article/details/123236523


猜你喜欢
- 最近在为公司做一个门户网站,项目并不咋D,可规划却不小.在做的过程中就发现修改占了很大的工作量.于是就开始想了想如何使前端修改轻松一些.这个
- 一、前言Celery是一个基于python开发的分布式任务队列,而做python WEB开发最为流行的框架莫属Django,但是Django
- parseFloat()方法的定义和用法:parseFloat()方法可以解析一个字符串,并返回一个浮点数。注:如果字符串中的第一个字符不能
- 本次薯片会一改以往低调、沉稳之作风,先瑜伽团美女show上阵,再是以臭为首的吃喝团上阵,两轮下来大家情绪Hight到了极点,自然讨论的时候思
- 图片人脸检测#coding=utf-8import cv2import dlibpath = "img/meinv.png&quo
- 引言https://github.com/go-chassis/go-chassis是一个微服务开发框架,而微服务开发框架带来的其中一个课题
- 树型结构在我们应用程序中还是很常见的,比如文件目录,BBS,权限设置,部门设置等。这些数据信息都采用层次型结构,而在我们现在的关系型数据库中
- OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版。本文对OAuth 2.0的
- 在建立与服务器的连接时出错。在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致
- Linux添加mysql系统环境变量昨天安装完mysql后,直接在export PATH上面一行,增加了export PATH=/usr/l
- 一、复合查询1.1 多表查询实际开发中往往数据来自不同的表,所以需要多表查询,但是可以将多张表做笛卡尔积后的表当做是一张表,也就是单表查询。
- 1、文件编码:指的是页面文件(.html,.php等)本身是以何种编码来保存的。记事本和Dreamweaver在打开页面时候会自动识别文件编
- 初学python和numpy,对在学习多维切片的过程中遇到的问题做个总结。一维切片就不说了,比较简单,先说下二维的,二维的理解了多维的就简单
- 本文实例讲述了mysql自定义函数原理与用法。分享给大家供大家参考,具体如下:本文内容:什么是函数函数的创建函数的调用函数的查看函数的修改函
- 结合order by关键词和limit关键词是可以解决很多的topN问题,比如从二手房数据集中查询出某个地区的最贵的10套房,从电商交易数据
- 前言本博客默认读者对神经网络与Tensorflow有一定了解,对其中的一些术语不再做具体解释。并且本博客主要以图片数据为例进行介绍,如有错误
- 首先找到要下载的歌曲排行榜的链接,这里用的是:https://music.163.com/discover/toplist?id=37786
- GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。1、概述“Group By”从字面意义上理解就是根据“By”指定的
- 定义总是很抽象。存储进程其实就是能完成一定操作的一组SQL语句,只不过这组语句是放在数据库中的(这里我们只谈SQL SERVER)。如果我们
- 某些时候我们需要让类动态的添加属性或方法,比如我们在做插件时就可以采用这种方法。用一个配置文件指定需要加载的模块,可以根据业务扩展任意加入需