我正在使用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数据。
这是requests
的工作示例
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
可能可以使用Seleniu
或PhantomJS
运行JavaScript。但我较新尝试使用Scrapy
。