【问题标题】:Web scraping a text() in python网页在 python 中抓取一个 text()
【发布时间】:2015-12-15 18:23:11
【问题描述】:

我在使用网页抓取功能时遇到问题。我想要得到的两件事的 XPath 是

/html/body/div/table[2]/tbody/tr[5]/td[1]/div[1]/ul/li[1]/text()
/html/body/div/table[2]/tbody/tr[5]/td[1]/div[1]/ul/li[1]/a

html是

<li><a href="http://www.acu.edu/" target="_blank" class="institution">Abilene Christian University</a> (TX)</li>

我试图有一个函数来循环遍历 tr[5] 中的每个 li。我遇到的问题是获取文本()。我已经尝试了这个函数的许多不同的变体

from lxml.html import parse
from urllib2 import urlopen
def _clean(lst):
    for elm in lst:
        lnk=elm.findall('.//a')
        for this in lnk:
            lnk_txt.append(this.text_content())
        state_txt.append(elm.findall('.//text()'))

此特定函数在“()”上返回 KeyError。如果我删除 (),它会返回一个空元素列表。 lnk_txt 有效。

我想要得到的是两个列表。一是大学的名称。另一个是大学的位置。最终目标是制作元组(名称、状态)。

【问题讨论】:

  • 它是(TX)。我将示例和我的包添加到帖子中

标签: python html xpath web-scraping lxml.html


【解决方案1】:

你需要找到a元素的following text sibling

lnk.xpath("following-sibling::text()")

演示:

>>> import lxml.html
>>> data = '<li><a href="http://www.acu.edu/" target="_blank" class="institution">Abilene Christian University</a> (TX)</li>'
>>> li = lxml.html.fromstring(data)
>>> li.xpath("//a[@class='institution']/following-sibling::text()")[0].strip()
'(TX)'

【讨论】:

  • 谢谢你成功了。您是否有用于答案的资源,或者您是否从经验中知道?
  • @lost 我会说这是一项特定技能“在 html 中定位元素”。学习 xpath 语法、css 选择器——网上有很多信息。但是,我会说,练习和练习更多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-12
  • 2022-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-15
相关资源
最近更新 更多