使用Inspect元素

时间:2016-06-16 09:03:09

标签: python twitter beautifulsoup instagram screen-scraping

我试图通过抓取来从Instagram获取一些信息。我在twitter上试过这个代码并且工作正常但是在Instagram上没有显示结果这两个代码都在这里。

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 个答案:

答案 0 :(得分: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)

在您点击链接后从弹出窗口中显示的li标签中提取一些文本,您可以从无序列表中提取您想要的任何内容:

enter image description here

答案 1 :(得分: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可能无法在浏览器中浏览您浏览页面时看到的所有内容。 为了解决这个问题,有不同的Web驱动程序,例如Selenium webdriver(http://www.seleniumhq.org/projects/webdriver/)和PhantomJS(http://phantomjs.org/),它们模拟浏览器并可以在查找之前等待Javascript生成/显示数据。 / p>