2016-06-16 3 views
4

Я пытаюсь получить некоторую информацию от Instagram, соскабливая ее. Я пробовал этот код в твиттере, и он работал нормально, но он не показывает результат на Instagram, оба кода доступны здесь.Скребок с использованием элемента Inspect


Twitter код:

from bs4 import BeautifulSoup 
from urllib2 import urlopen 
theurl = "https://twitter.com/realmadrid" 
thepage = urlopen(theurl) 
soup = BeautifulSoup(thepage,"html.parser") 
print(soup.find('div',{"class":"ProfileHeaderCard"})) 

Результат: Прекрасно дано.


Instagram Код:

from bs4 import BeautifulSoup 
from urllib2 import urlopen 
theurl = "https://www.instagram.com/barackobama/" 
thepage = urlopen(theurl) 
soup = BeautifulSoup(thepage,"html.parser") 
print(soup.find('div',{"class":"_bugdy"})) 

Результат: Ни

+2

Если вы посмотрите на источник, вы увидите, что содержимое динамически загружено, поэтому нет 'div._bugdy' –

+0

вам нужно использовать Selenium для этого типа утилизации. –

+0

Возможный дубликат http://stackoverflow.com/questions/37203059/how-can-a-scraped-html-be-different-from-the-source-code/37203351#37203351 –

ответ

0

Прежде всего, кажется, опечатка в адресе на линии 3.

from bs4 import BeautifulSoup 
from urllib2 import urlopen 
theurl = "https://www.instagram.com/barackobama/" 
thepage = urlopen(theurl) 
soup = BeautifulSoup(thepage,"html.parser") 
print(soup.find('div',{"class":"_bugdy"})) 

Во-вторых, так как вы работаете с динамически загруженным контентом, Python, возможно, не сможет увидеть весь контент, который вы видите при просмотре страницы в вашем браузере. Чтобы решить, что существуют различные веб-серверы, такие как Selenium webdriver (http://www.seleniumhq.org/projects/webdriver/) и PhantomJS (http://phantomjs.org/), которые эмулируют браузер и могут ждать, когда Javascript будет генерировать/отображать данные, прежде чем искать их.

1

Если вы посмотрите на источник, вы увидите, что содержимое динамически загружено, поэтому нет div._bugdy в том, что возвращается вашим запросом, в зависимости от того, что вы хотите, вы можете извлечь его из скрипта json :

import requests 
import re 
import json 

r = requests.get("https://www.instagram.com/barackobama/") 
soup = BeautifulSoup(r.content) 
js = soup.find("script",text=re.compile("window._sharedData")).text 
_json = json.loads((js[js.find("{"):js.rfind("}")+1])) 
from pprint import pprint as pp 

pp(_json) 

Это дает вам все, что вы видите на <script type="text/javascript">window._sharedData = ..... в источнике вернулся.

Если вы хотите использовать последователей, то вам нужно будет использовать что-то вроде selenium, сайт - это почти все динамически загружаемое содержимое, чтобы получить подписчиков, которые вам нужны, чтобы щелкнуть ссылку, которая видна только в том случае, если вы вошли в систему , это приведет вас ближе к тому, что вы хотите:

from selenium import webdriver 
import time 
login = "https://www.instagram.com" 
dr = webdriver.Chrome() 

dr.get(login) 

dr.find_element_by_xpath("//a[@class='_k6cv7']").click() 
dr.find_element_by_xpath("//input[@name='username']").send_keys(youruname") 
dr.find_element_by_xpath("//input[@name='password']").send_keys("yourpass") 
dr.find_element_by_css_selector("button._aj7mu._taytv._ki5uo._o0442").click() 
time.sleep(5) 
dr.get("https://www.instagram.com/barackobama") 

dr.find_element_by_css_selector('a[href="/barackobama/followers/"]').click() 
time.sleep(3) 
for li in dr.find_element_by_css_selector("div._n3cp9._qjr85").find_elements_by_xpath("//ul/li"): 
    print(li.text) 

это тянет текст из литиево тегов, которые появляются во всплывающем окне после того, как вы нажмете на ссылку, вы можете вытащить все, что вы хотите от неупорядоченного списка:

enter image description here

+0

Но некоторые из вещей, которые могут быть видимый из элемента Inspect, недоступен в источнике, таком как идентификаторы пользователей, поэтому, как это получить. – Ravi

+0

@ Рави, ты посмотрел на json? Весь контент загружается сценарием, поэтому у вас ничего нет, если вы не используете что-то вроде селена разбора json –

+0

. Ваш код работает идеально, но я хочу получить доступ к идентификаторам пользователей из https: // www. instagram.com/barackobama/followers/, но для этого исходного кода результаты не отображаются, а список отображается в элементе проверки. – Ravi

Смежные вопросы