我在HTML方面不是很好,所以我有点绊倒了。
我正在尝试使用python抓取instagram datetime帖子,并意识到日期时间信息并非没有帖子的html文档。但是,我可以使用inspect元素查询它。见下面的截图。
此日期时间信息的确切位置在哪里,我该如何获取?
我从中获取的示例是这个随机的帖子“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
答案 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并解析它,您应该能够访问您要查找的时间数据。
话虽如此, 更好 的方法是使用instagram's api进行抓取。他们将所有这些数据提供给开发人员,因此您不必抓取不断变化的网页。
(显然,Instagram的API只会为明确授予您应用权限的用户返回公开数据)