python 中的网络抓取文本()

Web scraping a text() in python

我在使用网络抓取功能时遇到问题。我想要获得的两件事的 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。我遇到的问题是获取 text()。我已经尝试了这个函数的许多不同变体

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

此特定函数 returns '()' 上的 KeyError。如果我删除 (),它会 returns 一个空元素列表。 lnk_txt 有效。

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

您需要找到 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)'