无法找到用于抓取

时间:2016-04-28 02:44:32

标签: html python-2.7

我在HTML方面不是很好,所以我有点绊倒了。

我正在尝试使用python抓取instagram datetime帖子,并意识到日期时间信息并非没有帖子的html文档。但是,我可以使用inspect元素查询它。见下面的截图。

Inspect element of date (below follow button

此日期时间信息的确切位置在哪里,我该如何获取?

我从中获取的示例是这个随机的帖子“https://www.instagram.com/p/BEtMWWbjoPh/”。元素位于页面中显示的“12h”。

[更新] 我正在使用urllib来抓取网址,并使用python中的bs4进行抓取。输出没有返回任何日期时间。代码如下。我还打印出整个html,我很惊讶它没有包含日期​​时间。

html = urllib.urlopen(url).read()
soup = BeautifulSoup(html, 'html.parser')
tags = soup.select('time')
    for tag in tags:
        dateT = tag.get('datetime').getText()
        print dateT

2 个答案:

答案 0 :(得分:2)

在您的开发者控制台中,输入以下内容:

document.getElementsByTagName('time')[0].getAttribute('datetime');

这将返回您要查找的数据。上面的代码只是通过HTML查找标记名time,其中只有一个,然后从中抓取datetime属性。

至于python,如果你还没有,请查看BeautifulSoup。这个库允许你在python中做类似的事情:

from bs4 import BeautifulSoup
soup = BeautifulSoup(html_doc, 'html.parser')
soup.time['datetime']

html_doc是您的原始HTML。要获取原始HTML,请使用requests库。

答案 1 :(得分:2)

我认为您遇到的问题是urllib.urlopen(url).read()不会执行页面上的任何javascript。

因为Instagram是一个使用您的浏览器呈现其网站的客户端JavaScript应用程序,您需要某种浏览器客户端来评估javascript,然后在页面上找到该元素。为此,我通常使用phantomjs(我通常将它与ruby驱动程序Capybara一起使用,但我会假设有一个类似的python包)

但是,如果您执行urllib.urlopen(url).read(),您应该在脚本标记中看到一个以<script type="text/javascript">window._sharedData = {...

开头的JSON块

该JSON块将包含您要查找的数据。如果您要评估该JSON并解析它,您应该能够访问您要查找的时间数据。

话虽如此, 更好 的方法是使用instagram's api进行抓取。他们将所有这些数据提供给开发人员,因此您不必抓取不断变化的网页。

(显然,Instagram的API只会为明确授予您应用权限的用户返回公开数据)