12

我想从公共 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

谢谢您的帮助。

4

1 回答 1

12

如果您查看页面的源代码,您会看到一些 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

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

于 2013-08-08T16:21:11.507 回答