栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

XPath和bs4

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

XPath和bs4

XPath

XPath 是一门在 XML 文档中查找信息的语言。XPath 用于在 XML 文档中通过元素和属性进行导航

使用方法:

使用前要把response.text通过etree.HTML()转换为对应的格式,再通过 变量名.xpath('xpath')截取内容

response=requests.get(url,headers=headers)
response.encoding='utf-8'    #根据格式修改为utf-8或者gbk
html=response.text
xpath_style=etree.HTML(html)
text=xpath_style.xpath('xpath')
print(text)

 

现在的目标是百度首页的热搜,在左边的源码里可以看到热搜的所在位置,他的XPath就是:

/html/body/div/div/div[5]/div/div/div[3]/ul/li[1]/a/span[2]/text()

xpath的写法就和文件夹的路径一样,从大到小,可以在左边的源码中查看节点的结构,xpath中还有div[3],div[5]的写法,div[3]表示当前结构下的第三个div节点,下标默认从1开始

可以看到第一行的div下边有三个div,要表示第三个div就需要加上下标[3],其他节点也是如此。

获取关键字的值:以下案例地址:汽车产业资讯-汽车频道-和讯网

若要获取a标签里的href的值,xpath确定a标签之后在后边加 /@href

/html/body/div[5]/div[2]/div[1]/div[2]/div[1]/ul[1]/li[1]/a/@href

@+关键字名称 表示获取关键字的值

可以利用这种写法来浓缩xpath://*[@id="hotsearch-content-wrapper"]/li[1]/a/span[2]/text()

//*表示所有节点,[@id="hotsearch-content-wrapper"]表示id关键字的值=="hotsearch-content-wrapper",用这种写法确定一个或者多个节点,再确定后边的内容

以上两种写法的最后一个节点是text() 表示获取上一个节点的文本内容,若去掉text(),则输出:。或者输出是给变量加上 .text

for i in b:    #b是通过xpath返回回来的变量
    print(i.text)

以上是XPath最基本最常用的写法,xpath还有很多方法和函数,具体请参考:XPath 教程

bs4

BS4全称是Beatiful Soup,它提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。

使用方法:

将response.text通过Beautifulsoup函数转换为对应的格式,‘html.parser’为bs4的解析器,种类有很多,它的功能就不在过多介绍了。

response=requests.get(url,headers=headers)
response.encoding='utf-8'    #根据格式修改为utf-8或者gbk
html=response.text
soup=BeautifulSoup(html,'html.parser')

主要介绍两个函数find_all()和select() (经过测试find_all比select快一些)

find_all():通过指定的标签名称和关键字的值来确定段落,匹配网页中的所有符合规则的结果。

PS:还有一个和find_all()相似的函数,find(),只匹配第一个符合规则的结果。

soup.find_all('div',class_='art_contextBox') 表示标签为div,class的值为art_contextBox的段落

注意:因为class为关键字,所以函数中的class需要加上下划线_!

这个函数的返回值是 类型 可以用下标进行操作。

返回文本内容的话可以用get_text()函数,用法:

f_list=soup.find_all('div',class_='art_contextBox')
for i in f_list:
        print(i.get_text())

select():指定结构确定段落

soup.select('div span') 表示获取 div节点下 span节点的内容(一个网页中可能有多个这种关系,可以通过下标确定需要的内容)

soup.select("div[class='temp01'] ul li a") 表示节点名称div且class关键字的值是temp01的节点下的ul节点下的li节点下的a节点的内容。

返回的内容如下图所示

同样可以通过get_text()获取节点中的文本,用法:

f_list=soup.select("div[class='temp01'] ul li a")
for i in f_list:
        print(i.get_text())

还可以根据get()函数获取关键字的值:

f_list=soup.select("div[class='temp01'] ul li a")
for i in f_list:
        print(i.get('href'))
总结:

xpath和bs4各有各的特点,xpath相比来说简单一点,速度较快,根据自己的使用习惯和不同的应用场景来选择解析方式吧。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/768186.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号