使用 xpath/lxml 抓取文本

Posted

技术标签:

【中文标题】使用 xpath/lxml 抓取文本【英文标题】:Scraping text with xpath/lxml 【发布时间】:2018-01-02 08:23:35 【问题描述】:

我正在尝试使用 xpath/lxml 从http://www.cellartracker.com/wine.asp?iWine=91411 中的“drink between: 2005 - 2013”​​的文本中抓取文本“2005-2013”​​,并且只能为其他一些这个网站上的页面,而不是这个。不确定我做错了什么/如果我从元素复制的 xpath 不正确

它告诉我:

print(content_divs[0].text_content().strip())
IndexError: list index out of range

这是我的代码:

import requests, lxml.html
page = requests.get('http://www.cellartracker.com/wine.asp?iWine=91411')
html = lxml.html.fromstring(page.content)
content_divs = html.xpath('//*[@id="wine_copy_inner"]/p/a[4]')
print(content_divs[0].text_content().strip())

感谢您的帮助!!!

【问题讨论】:

【参考方案1】:

如果你想获得"2005 - 2013",你可以使用下面的代码

content = html.xpath('//a[@title="Source: Community"]/text()')

【讨论】:

对不起,我的意思是我想得到“2005 - 2013”​​(我已经更新了我的问题)虽然我不确定为什么其他人能够得到这个但我得到了错误使用相同的代码。 试试这个content = html.xpath('//a[@title="Source: Community"]/text()') 很抱歉再次打扰您,但我并不想从同一个站点获取“复古”,并且使用了与您类似的方法,但似乎不是在职的。 content_divs = html.xpath('//a[@href="http://cellartracker.com/list.asp?Table=List&Vintage]/text()')) 你的意思是复古?你到底想得到什么? 如果您访问此页面 (cellartracker.com/wine.asp?iWine=177807),年份是 2004 年【参考方案2】:

xpath 数组是否索引为零?

//*[@id="wine_copy_inner"]/p/a[4] 应该是...[3]

当您登录与注销时,a 标记的数量似乎发生了变化。可能想使用另一种方法来定位此标记。

【讨论】:

尝试使用beautifulsoup,但甚至无法找到最重要的 ,不确定我是否应该改用selenium 可能内容不同。抓取始终是一种风险,因为您始终依赖于页面始终保持一致,而事实往往并非如此。

以上是关于使用 xpath/lxml 抓取文本的主要内容,如果未能解决你的问题,请参考以下文章

使用 Jquery 抓取 BODY 中的任何文本节点

抓取特定文本(字符串)的网页

使用 cURL 抓取 JSON 文本时无法解析?

使用python如何摆脱从网站上抓取的文本中的尾随空格[重复]

使用 beautifulSoup、Python 在 h3 和 div 标签中抓取文本

Python - 使用 BeautifulSoup 从 URL 列表中抓取文本的最简单方法