python3上的scrapy如何获取在javascript上工作​​的文本数据

时间:2019-02-21 23:45:27

标签: python web-scraping scrapy web-crawler

https://www.reddit.com/r/gameofthrones/

enter image description here

在此页面中,我尝试从“ 14天前”之类的时间文本中获取时间信息。

在浏览器中,当我将鼠标指针移到该文本时,它会显示基于日期时间的信息。但是,如果我查看网页源,就找不到它。所以我认为它基于Javascript。

我不是Web开发人员,并且不确定如何找到问题。

我的问题是:如何使用chrome dev-tools和scrapy shell跟踪基于javascript的数据?

4 个答案:

答案 0 :(得分:1)

$ scrapy shell https://www.reddit.com/r/gameofthrones/ 

...

>>> response.css('[data-click-id="timestamp"]::text').get()
'15 days ago'

答案 1 :(得分:0)

Reddit有一个official API。在这种情况下,我会认真考虑使用它而不是HTML抓取。

另一方面,如果您确实想要进行HTML抓取,那么我建议您使用Scrapy Splash之类的东西来触发该Javascript。试图找到隐藏在Javascript对象中的原始数据可能不值得。特别是如果Javascript进行了其他处理,您需要复制这些处理,因为它无论如何都不会在纯Scrapy上运行。

答案 2 :(得分:0)

enter image description here

在浏览器中捕获的这张图片结果。

答案 3 :(得分:0)

您需要使用Reddit的只读(无参与)子域:

https://np.reddit.com/r/gameofthrones/

请注意,它是np而不是www。在此视图中,您可以在<time>标签(在任何浏览器中)的HTML中获取完整的日期和时间,而无需运行Javascript: time tag

示例:

scrapy shell 'https://np.reddit.com/r/gameofthrones/'

>>> response.css('time::attr(datetime)').get()
'2010-03-02T22:52:12+00:00'