Python漂亮的汤未找到span元素

时间:2018-11-08 01:39:22

标签: python-3.x beautifulsoup

我正在以下Instagram页面上测试instagram:https://www.instagram.com/acmilan/,并尝试获取posts元素(现在='4,552 posts')。 如果我检查页面,则HTML看起来像所附的屏幕截图。 我找到该元素的代码是:

driver = webdriver.Chrome
soup = BeautifulSoup(driver.page_source, 'html.parser')
elements = soup.find_all("ul", text=re.compile("posts"))
print(len(elements))

但是找不到任何东西。 然后,我尝试了:

elements = soup.find_all("span", text=re.compile("posts"))
print(len(elements))

仍然没有。 然后,我尝试了:

elements = soup.find_all(True, text=re.compile('posts'))

再次,什么也没有。enter image description here

这似乎是一件容易的事,但是我却找不到解决方法。有什么建议么? 谢谢

2 个答案:

答案 0 :(得分:1)

这是我用此代码解决的方法。请确保您安装了re模块。

from bs4 import BeautifulSoup
import requests
import re
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}

url = 'https://www.instagram.com/acmilan/'
page = requests.get(url, headers=headers)
soup = BeautifulSoup(page.text, 'html.parser')
find = soup.findAll('meta')
meta = re.findall('g,.+\ Posts', str(find))[0]
print(meta.replace('g, ', '').replace('Posts', ''))

Output: 4,552 

答案 1 :(得分:0)

要获得不需要的帖子数BeautifulSoupselenium,请使用regex,甚至最好使用json

import requests
import re
import json

url = 'https://www.instagram.com/acmilan/'
page = requests.get(url)
postCount = re.search('timeline_media":{"count":(\d+)', page.text)
print('regex: ' + postCount.groups()[0])

# using json
jString = re.search('window._sharedData = (\{.+?\});</script>', page.text)
json_data = json.loads(jString.groups()[0])
postCount = json_data['entry_data']['ProfilePage'][0]['graphql']['user']['edge_owner_to_timeline_media']['count']
print('json: ' + str(postCount))

# to show all json object
# print(json_data)