如何用 BeautifulSoup 抓取 Instagram

Posted

技术标签:

【中文标题】如何用 BeautifulSoup 抓取 Instagram【英文标题】:How to scrape Instagram with BeautifulSoup 【发布时间】:2013-08-10 10:19:13 【问题描述】:

我想从公共 Instagram 帐户中抓取图片。我对bs4非常熟悉,所以我从那个开始。使用 Chrome 上的元素检查器,我注意到图片在一个无序列表中,并且 li 有“照片”类,所以我想,到底是什么——用 findAll 很难刮,对吧?

错误:它不返回任何内容(代码如下),我很快注意到 元素检查器中显示的代码和我从请求中提取的代码不一样 AKA no unordered list in我从请求中提取的代码。

知道如何获取元素检查器中显示的代码吗?

为了记录,这是我开始的代码,它不起作用,因为无序列表不存在:

from bs4 import BeautifulSoup
import requests
import re

r = requests.get('http://instagram.com/umnpics/')
soup = BeautifulSoup(r.text)
for x in soup.findAll('li', 'class':'photo'):
    print x

感谢您的帮助。

【问题讨论】:

该页面大量使用 javascript。您想查看页面 source(Chrome:查看 -> 开发人员 -> 查看源代码)以查看浏览器下载的内容。您在检查器中看到的是浏览器在运行页面引用的 JavaScript 后构建的内容。 【参考方案1】:

如果您查看网页的源代码,您会看到一些 javascript 生成网页。在元素浏览器中看到的是脚本运行后的网页,beautifulsoup 只是获取了 html 文件。为了解析呈现的网页,您需要使用 Selenium 之类的东西来为您呈现网页。

例如,这就是 Selenium 的外观:

from bs4 import BeautifulSoup
import selenium.webdriver as webdriver

url = 'http://instagram.com/umnpics/'
driver = webdriver.Firefox()
driver.get(url)

soup = BeautifulSoup(driver.page_source)

for x in soup.findAll('li', 'class':'photo'):
    print x

现在汤应该是你所期待的。

【讨论】:

以上是关于如何用 BeautifulSoup 抓取 Instagram的主要内容,如果未能解决你的问题,请参考以下文章

如何用 BeautifulSoup 等一秒钟来保存汤元素以让页面中的元素加载完成

如何用 BeautifulSoup 更改标签名称?

如何用 Beautifulsoup 解析“数据文本”? [复制]

如何在 BeautifulSoup 中使用其样式定义(如填充、字体大小等)对元素进行 Web 抓取

如何用python抓取电话

如何用python抓取百度地图数据