【发布时间】:2021-03-18 16:16:56
【问题描述】:
我正在网页抓取一个多页目录,每页上有 100 个表行条目。 我已经下载了相关页面并将它们存储为泡菜文件。 在尝试提取信息时,我遇到了一个我不明白的奇怪问题:
我两次调用 XPath:
- 首先选择表格行。结果存储在列表中。这很好用。
- 在已保存的表格行列表中排名第二。我希望 xpath 只检查该范围。但是,发生的情况是 xpath 从所有表行中检索信息。那时甚至不应该提供给它的信息。
def information_extraction():
website = store.unpickle_objects('test')
utf8_parser = lxml.html.HTMLParser(encoding = "utf-8") # Handling encoding issues
for page in website:
page_content = lxml.html.fromstring(page, parser= utf8_parser)
list = page_content.xpath('//table[contains(@id,"R1")]/tbody/tr')
print ("Length list: ", len(list),", Type: ", type(list))# List with 100 table rows
list_element = list[0]
print (lxml.html.tostring(list_element)) # 1 row, correct html snippet
first_link = list_element.xpath('//td[1]/a/@href')
print(first_link) #Error, I get a list of all 100 occurrences from list and not the 1 contained in list_element
我正在使用 Python 3。
【问题讨论】:
-
尝试通过添加前导句点使您的 XPath 相对:
.//td[1]/a/@href -
谢谢@kjhughes:一个额外的“。”就是所需要的,相对路径按预期工作。现在知道要搜索什么了,我找到了这个explanation。
-
@Timoth04:因为这对你有用,我已经添加了一个完整的答案和解释below。
标签: python html xml web-scraping xpath