如何用 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 解析“数据文本”? [复制]