python - 为什么 Scrapy 选择器只带父元素?
问题描述
我正在尝试设置一个 Scrapy 选择器以从 Trezor 支持的硬币页面(https://trezor.io/coins/)获取表格上的一些数据:
In [1]: import requests
...: from scrapy.selector import Selector
...: req = requests.get('https://trezor.io/coins/').content
...: xs = '//*[@id="content"]/tr'
...: sel = Selector(text=req).xpath(xs)
In [2]: sel.extract_first()
Out[2]: '<tr class="coin " data-href="./#BTC" id="BTC"></tr>'
选择器不应该带来tr
元素及其内部的所有内容(在这种情况下,六个td
元素具有更多内部元素?当我尝试td
手动访问元素(使用xs = '//*[@id="content"]/tr[1]/td'
or xs = '//*[@id="content"]/tr[1]/td[1]'
)时,我得到的只是一个空列表。我有也尝试获取子节点,但无济于事。
参照。在Wikipedia 的主页上提取,您可以在其中获取指定容器内的所有内容:
In [3]: req2 = requests.get('https://en.wikipedia.org/wiki/Main_Page').content
...: xd = '//*[@id="mp-welcomecount"]'
...: sel2 = Selector(text=req2).xpath(xd)
In [4]: sel2.extract_first()
Out[4]: '<div id="mp-welcomecount">\n<div id="mp-welcome">Welcome to <a href="/wiki/Wikipedia" title="Wikipedia">Wikipedia</a>,</div>\n<div id="mp-free">the <a href="/wiki/Free_content" title="Free content">free</a> <a href="/wiki/Encyclopedia" title="Encyclopedia">encyclopedia</a> that <a href="/wiki/Help:Introduction" title="Help:Introduction">anyone can edit</a>.</div>\n<div id="articlecount"><a href="/wiki/Special:Statistics" title="Special:Statistics">6,088,421</a> articles in <a href="/wiki/English_language" title="English language">English</a></div>\n</div>'
为什么在 Trezor 的情况下我只得到tr
元素,我如何更正我的代码以将其中包含的所有内容都带入其中?
解决方案
在解析页面时,Scrapy 似乎有点不对劲(tr 结束标记出错)。tr 和 td 元素之间没有“父子”连接。你只有兄弟姐妹。解析页面的结构:
tr
td
span
img
td
strong
small
a
td
img
td
img
td
a
a
a
a
td
a
a
tr
...
也许您可以使用以下 XPath 表达式从表中获取所有数据:
//tr[contains(@class,"coin")][1]/following-sibling::td
输出:8364 个节点
或者在scrapy设置中寻找一个神奇的选项。
推荐阅读
- go - 从多重返回函数中命名接收变量
- javascript - JavaScript 对象为空时如何隐藏 HTML 输出?
- python - 在 python 中运行 postgresql 函数并得到错误
- python - 如何取出aa pretrained keras模型的中间层
- javascript - 硒元素不可点击
- php - PHP 同时进行多个 API 调用而不会超时
- javascript - 如何使用动态返回值创建笑话模拟实现
- javascript - 尝试在 iframe 中编辑 dom 元素时出现“(变量名)为空”
- python-3.x - 为 Tensorflow 模型在 serving_input_fn 中生成特征
- ffmpeg - Windows 10 上的 FFMPEG 流式网络摄像头到 RTP