python3.4:LXML web抓取

2024-10-17 06:20:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用下面的代码尝试返回该网站上的股票列表。代码的结果是一个空列表。我从googlechromium开发工具复制xpath。我做错什么了?

from lxml import html
import requests


url = 'http://en.wikipedia.org/wiki/List_of_S%26P_500_companies'

resp = requests.get(url)
tree = html.fromstring(resp.text)

tickers = tree.xpath(r'//*[@id="mw-content-text"]/table[1]/tbody/tr[1]/td[1]/a')

print(tickers)

Tags: 代码textfromimporttreeurl列表网站
1条回答
网友
1楼 · 发布于 2024-10-17 06:20:06

浏览器添加了缺少的HTML元素,这些元素是HTML规范声明的模型的一部分。lxml不将这些添加到中。在

最常见的此类元素是<tbody>元素。你的文档没有这样的元素,但是Chrome有,他们把它放在XPath中。<thead>元素中的另一个这样的元素;同样,原始的HTML缺少它,但是Chrome把它放进去,把一个<tr>行和<th>元素放在一起。在

因此,正确的XPath表达式是:

tickers = tree.xpath(r'//*[@id="mw-content-text"]/table[1]/tr[2]/td[1]/a')

例如,表中的第二行,该行中的第一个表单元格。在

{{cd7>在这种情况下,您不需要直接加载特定于cd7}的url:

^{pr2}$

如果要提取第一列中的所有<a>元素,则必须删除对<tr>元素的限制;XPath选择所有元素,删除{}以选择all

links = tree.xpath(r'//*[@id="mw-content-text"]/table[1]/tr/td[1]/a')
for link in links:
    print(link.text, link.attrib['href'])

相关问题 更多 >