如何使用 LXML 获取文本
您需要使用 XPath 选择器来获取数据。请参阅 XPath 教程 如果你需要复习。
步骤 1。 使用 pip 安装 LXML。
pip install lxml
from lxml import etree
import requests
例子1
步骤 2。 让我们首先检查目标页面的源代码。我们将使用我们的 最佳住宅代理提供商 在本示例中,您可以找到提供商名称 申报单 与 品牌 类。
步骤 3。 然后,发出 HTTP 请求并将响应分配给 r 变量来抓取网站。
r=requests.get("https://proxyway.com/best/residential-proxies")
步骤 4。 使用以下方法解析 HTML 响应内容 etree.HTML() LXML 提供的解析器。
tree = etree.HTML(r.text)
步骤 5。 点击 DIV 包含类的元素 品牌 并获取文本元素。
divs = tree.xpath(".//div[@class='brand']/text()")
让我们仔细看看代码:
- .//div - 全选 申报单 在 HTML 文档中。
- .//div[@class='品牌'] - 全选 申报单 有一类 牌。
- /文本() – 获取包含在 DIV.
注意: 结果是 LXML 元素的列表。
步骤 6。 让我们打印出来 申报单 列表。您可以看到它还包含我们不需要的空格和不间断空格(\xa0 元素):
您可以清理结果并将其分配给新的 brand_names 列表:
brand_names = []
for div in divs:
if len(div.strip()) > 0:
brand_names.append(div.strip())
这是 脚本的输出。它显示您刚刚抓取的提供商名称。
结果: 恭喜,您已提取内容。以下是完整脚本:
from lxml import etree
import requests
r=requests.get("https://proxyway.com/best/residential-proxies")
tree = etree.HTML(r.text)
divs = tree.xpath(".//div[@class='brand']/text()")
brand_names = []
for div in divs:
if len(div.strip()) > 0:
brand_names.append(div.strip())
#print (brand_names)
例子2
r=requests.get("https://books.toscrape.com")
步骤 4。 使用以下方法解析 HTML 响应内容 etree.HTML() LXML 提供的解析器。
tree = etree.HTML(r.text)
步骤 5。 现在让我们通过检查代码来获取书名。书名可以在 h1 标签在一个 DIV 配 产品主页 类:
XPath 应如下所示:
title = tree.xpath("//div[@class='col-sm-6 product_main']/h1/text()”)[0]
注意: 然而,这行不通,因为还有另一个班级在场—— col-sm-6。因此,XPath 选择器将找不到这个精确的 DIV.
步骤 6。 让我们指定这两个类以便 XPath 可以工作。
title = tree.xpath("//div[@class='col-sm-6 product_main']/h1/text()”)[0]
您也可以使用 包含() 方法替代:
title = tree.xpath("//div[contains(@class,'product_main')]/h1/text()")[0]
print (f'Title: {title}')
让我们仔细看看代码:
- (@班级) – 从文档中选择所有类别。
- //div([包含(@class,'product_main']) – 选择 DIV 包含一个 product_main 类。
- /小时1 – 标题文本不在 div 本身中,而是在其 子元素。
- /h1/文本() – 从中获取文本 标签。
- [0] –自 树.xpath() 方法返回一个列表,我们想要文本,我们可以简单地抓取该列表的第一个元素。
步骤 6。 现在让我们来了解一下这本书的描述。 它可以在 标签下方没有任何描述属性 DIV,其中包含其标题。
获取描述文本并避免选择任何其他方法 不相关的元素如下所示:
description = tree.xpath("//div[@id='product_description']/following-sibling::p/text()")[0]
print (f'Description: {description}')
- //div[@id='产品描述'] – 我们选择 DIV 与 id of 产品描述 这样我们就不会选择错误的元素。
- /关注兄弟姐妹::p – 选择下一个 兄弟姐妹 DIV 我们之前已经选择过。您可以获取有关 Xpath 轴的更多信息 开始.
- /文本() – 获取文本 标签。
结果: 恭喜,您已提取图书名称和描述。以下是完整脚本:
from lxml import etree
import requests
r=requests.get('https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html')
tree = etree.HTML(r.text)
title = tree.xpath("//div[contains(@class,'product_main')]/h1/text()")[0]
print (f'Title: {title}')
description = tree.xpath("//div[@id='product_description']/following-sibling::p/text()")[0]
print (f'Description: {description}')