我想从公共(public) Instagram 帐户中抓取图片。我对 bs4 非常熟悉,所以我从它开始。使用 Chrome 上的元素检查器,我注意到图片在无序列表中,并且 li 有类“照片”,所以我想,这到底是怎么回事——用 findAll 抓取不会那么难,对吧?
错误:它没有返回任何东西(下面的代码),我很快注意到 元素检查器中显示的代码和我从请求中提取的代码不一样 也就是没有无序列表我从请求中提取的代码。
知道如何获取元素检查器中显示的代码吗?
仅作记录,这是我开始的代码,它不起作用,因为没有无序列表:
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 生成了该网页。在元素浏览器中看到的是脚本运行后的网页,而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
现在汤应该是你所期待的。
关于python - 如何使用 BeautifulSoup 抓取 Instagram,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18130499/