我正在以下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'))
这似乎是一件容易的事,但是我却找不到解决方法。有什么建议么? 谢谢
答案 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)
要获得不需要的帖子数BeautifulSoup
或selenium
,请使用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)