我们使用联盟链接。它们让我们能够维持运营,而您无需承担任何费用。

如何使用 LXML 获取文本

有关如何使用 LXML 获取文本的分步指南。

您需要使用 XPath 选择器来获取数据。请参阅 XPath 教程 如果你需要复习。

步骤 1。 使用 pip 安装 LXML。

				
					pip install lxml
				
			
TIPS: LXML 文档。如果您在 Python 中使用 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()")
				
			

让我们仔细看看代码:

  1. .//div - 全选 申报单 在 HTML 文档中。
  2. .//div[@class='品牌'] - 全选 申报单 有一类 牌。
  3. /文本() – 获取包含在 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

步骤 2。 让我们抓取一本书的标题及其描述。我们将使用 books.toscrape.com 本例中为网站。 步骤 3。 然后,发出 HTTP 请求并将响应分配给 r 变量来抓取网站。
				
					r=requests.get("https://books.toscrape.com")
				
			

步骤 4。 使用以下方法解析 HTML 响应内容 etree.HTML() LXML 提供的解析器。

				
					tree = etree.HTML(r.text)
				
			

步骤 5。 现在让我们通过检查代码来获取书名。书名可以在 h1 标签在一个 DIV  配  产品主页 类:

_获取文本_lxml_2_1

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}')
				
			

让我们仔细看看代码:

  1. (@班级) – 从文档中选择所有类别。
  2. //div([包含(@class,'product_main']) – 选择 DIV 包含一个 product_main 类。
  3. /小时1 – 标题文本不在 div 本身中,而是在其  子元素。
  4. /h1/文本() – 从中获取文本  标签。
  5. [0] –自 树.xpath() 方法返回一个列表,我们想要文本,我们可以简单地抓取该列表的第一个元素。


步骤 6。 
现在让我们来了解一下这本书的描述。 它可以在  标签下方没有任何描述属性 DIV,其中包含其标题。

获取文本_lxml_2_2 (1)

获取描述文本并避免选择任何其他方法  不相关的元素如下所示:

				
					description = tree.xpath("//div[@id='product_description']/following-sibling::p/text()")[0]
print (f'Description: {description}')
				
			
让我们仔细看看代码:
  1. //div[@id='产品描述'] – 我们选择 DIV 与 id of 产品描述 这样我们就不会选择错误的元素。
  2. /关注兄弟姐妹::p – 选择下一个  兄弟姐妹 DIV 我们之前已经选择过。您可以获取有关 Xpath 轴的更多信息 开始.
  3. /文本() – 获取文本  标签。
这是 脚本的输出。它显示您刚刚抓取的书名和描述。
获取文本lxml_2_3

结果: 恭喜,您已提取图书名称和描述。以下是完整脚本:

				
					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}')