Как очистить Instagram с BeautifulSoup


Я хочу соскрести фотографии с публичного аккаунта Instagram. Я довольно хорошо знаком с bs4, поэтому я начал с этого. Используя инспектор элементов в Chrome, я заметил, что картинки находятся в неупорядоченном списке, а у Ли есть класс "Фото", поэтому я подумал, что, черт возьми, не так уж трудно наскрести с помощью 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
Спасибо за вашу помощь.
1 9

1 ответ:

Если вы посмотрите на исходный код страницы, вы увидите, что некоторые javascript генерируют веб-страницу. То, что вы видите в браузере элементов-это веб-страница после запуска скрипта, и beautifulsoup просто получает html-файл. Для того, чтобы проанализировать отрисованную веб-страницу, вам нужно будет использовать что-то вроде 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
Теперь суп должен быть таким, как вы ожидаете.