javascript - Scrapy 返回 xpath 的空列表

标签 javascript python html web-scraping scrapy

我正在使用 Scrapy 从 openreview url 获取摘要。例如,我想获取 http://openreview.net/forum?id=Bk0FWVcgx 的摘要,并在执行后

$ scrapy shell "http://openreview.net/forum?id=Bk0FWVcgx" $ response.xpath('//span[@class="note_content_value"]').extract()

我回来了[] 。另外,当我这样做view(response)时我被引导到一个空白网站 file:///var/folders/1j/_gkykr316td7f26fv1775c3w0000gn/T/tmpBehKh8.html .

此外,检查 openreview 网页显示存在我以前从未见过的脚本元素。当我打电话时

response.xpath(//script).extract()我得到的东西像 u'<script src="static/libs/search.js"></script>'例如。

我读过一些关于这与 javascript 有关的内容,但我是 Scrapy 的初学者,不确定如何绕过它并获得我想要的东西。

最佳答案

我发现该页面使用 JavaScript/AJAX 加载地址中的所有信息
http://openreview.net/notes?forum=Bk0FWVcgx&trash=true

但它需要两个 cookie 才能访问此信息。第一个服务器发送 cookie GCLB。稍后页面加载 http://openreview.net/token并获取第二个 cookie openreview:sid。之后页面就可以加载 JSON 数据了。

这是带有请求的工作示例

import requests

s = requests.Session()

# to get `GCLB` cookie
r = s.get('http://openreview.net/forum?id=Bk0FWVcgx')
print(r.cookies)

# to get `openreview:sid` cookie
r = s.get('http://openreview.net/token')
print(r.cookies)

# to get JSON data
r = s.get('http://openreview.net/notes?forum=Bk0FWVcgx&trash=true')
data = r.json()
print(data['notes'][0]['content']['title'])
<小时/>

其他解决方案:使用Selenium或其他工具运行JavaScript代码,然后您可以获得包含所有信息的完整HTML。 Scrapy 可能可以使用 SeleniuPhantomJS 来运行 JavaScript。但我最近尝试使用 Scrapy

关于javascript - Scrapy 返回 xpath 的空列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40444957/

相关文章:

php - 在另一个 div 中显示一个 div 的菜单链接

javascript - 如何通过 Google App Script 获取单元格编辑历史记录?

javascript - apollo-client 没有响应头

python - 转置卷积(反卷积)算法

python - 错误 : command 'x86_64-linux-gnu-gcc' failed with exit status 1 while installing pygsr,

python - 多维 ndarray 的 argsort

javascript - 使用 Javascript 单击时使 div 的不透明度 = 1

javascript - 为什么asm.js比普通js(素数生成)慢?如何加快速度?

javascript - d3js 图表 : how to use clip-path to limit the length of a line to specific bounding box

html - 将背景图像定位到其自身元素的边距中 - 这可能吗?