【发布时间】:2016-01-15 16:17:27
【问题描述】:
如果我的问题听起来太基本或太笼统,我深表歉意,但这让我困惑了很长一段时间。我是一名几乎没有 IT 背景的政治学家。我自己对这个问题的研究并没有解决这个难题。
据说 Scrapy 无法抓取 JavaScript 或 AJAX 生成的网页内容。但是我们怎么知道某些内容是否属于这一类呢?我曾经遇到过一些在 Chrome Inspect 中显示的文本,但无法被 Xpath 提取(我 99.9% 确信我的 Xpath 表达式是正确的)。有人提到这些文本可能隐藏在一些 JavaScript 后面。但这仍然是猜测,我不能完全确定这不是由于错误的 Xpath 表达式。是否有任何迹象可以让我确定这是 Scrapy 之外的东西,只能通过 Selenium 等程序处理?任何帮助表示赞赏。
-=-=-=-=-=
编辑(2015 年 1 月 18 日):我正在使用的网页是 http://yhfx.beijing.gov.cn/webdig.js?z=5。我要刮的具体信息是用红墨水圈出来的(见下图。对不起,是中文的)。
我可以在 Chrome 的 Inspect 中看到所需的文本,这表明要提取它的 Xpath 表达式应该是 response.xpath("//table/tr[13]/td[2]/text()").extract()。但是,表达式不起作用。
我在 Scrapy shell 中检查了response.body。所需的文本不在其中。我怀疑这里是 JavaScript 或 AJAX,但是在 html 中,我没有看到 JavaScript 或 AJAX 的迹象。知道它是什么吗?
【问题讨论】:
-
终极刮刀:import.io
-
好吧,如果 HTML 源代码中不存在某些内容(当然,如果其中有 JS 代码),您可以确定是由 JS 生成的。至于 99.9% 正确的 XPath 表达式 - 为什么不向我们展示它而不是说您已经看过 unicorn in the garden?并显示您尝试从中选择的 HTML。
-
@MathiasMüller,你是对的。我编辑了我的帖子并提供了网址。任何帮助表示赞赏。
-
@JosephZhou 我更喜欢使用“按标签查找值”的方法:
response.xpath("//td[contains(.,"text in the label")]/following-sibling::td/text()")
标签: javascript selenium xpath scrapy