当前位置: 代码迷 >> 综合 >> 【Python爬虫】 lxml 与 Beautiful Soup 解析网页代码的不同方式
  详细解决方案

【Python爬虫】 lxml 与 Beautiful Soup 解析网页代码的不同方式

热度:104   发布时间:2023-11-01 02:47:33.0

 

1. 使用 lxml 解析

(1). 首先,使用 lxml 做解析时需要先安装 lxml 库,并且用于解析的方法在 lxml 库中的 etree 类中,所以在使用时我们引入的是:

from lxml import etree

(2). 在实际解析时的操作为,如下所示:

# response.text 为响应的网页源码内容
content = etree.HTML(response.text)

(3). 在实际获取某一部分元素内容时,先获取到元素的 xpath,然后将 xpath 值放到 content.xpath() 的括号 中,如下所示:

(xpath的获取方式请看 https://blog.csdn.net/qq_37251994/article/details/108132122)

name = content.xpath("/html/body/div[3]/div[1]/div[6]/div[1]/div[1]/div/div[1]/h2/a/text()")

就可获取到指定元素的内容

2. 使用 Beautiful Soup 进行解析

(1). 同样的在使用前,我们要先安装好相对应的库,在安装时,实际安装的是 bs4 库,原因是因为Beautiful Soup库是被集成在 bs4 库中,所以在安装时要安装 bs4 库,同时,再安装上述提到的 lxml 库,引入Beautiful Soup的方法如下:

(也可以不安装 lxml ,若不安装 lxml 库,那么Beautiful Soup就会使用Python 默认的解析器。尽管Beautiful Soup既支持 Python 标准库中的 HTML 解析器有支持一些第三方解析器,但是 lxml 库具有功能更强大、速度更快的特点,所以建议安装 lxml 库)

from bs4 import BeautifulSoup

(2). 在实际解析时的操作为,如下所示:

# response.text 为响应的网页源码内容
content = BeautifulSoup(response.text, 'lxml')

(3). 在实际获取某一部分元素内容时,先获取到元素的 Selector,然后将 Selector 值放到 content.select() 的括号 中,如下所示:

(selector  获取方式请看 https://blog.csdn.net/qq_37251994/article/details/108132122)

name = content.select("body > div.mainbox > div.main > div.mianContent.clearfix > div.left > div.items > div:nth-child(1) > div.item1 > h2 > a")

此时获取到的是元素内容的整段 html 代码,由于在获取时可以获取一个元素或同时获取多个元素,所以最终的结果是一个列表形式,同时还需根据实际要获取的内容进一步获取:

for item in name:# 获取文本内容(html标签包裹的内容,如此代码中的xxxx:<a>xxxx</a>)item.get_text()# 获取 html 标签的属性内容(如代码中的xxxx: <a href="xxxx"></a>)item.get('href') # 括号中的值就是属性名称