问题描述
我正在尝试从该页面中获取收视率 https://www.rottentomatoes.com/m/12_years_a_slave(即 100,000+)使用 python selenium。 我尝试了各种硒定位器,但每次都出现 NoSuchElementException: 错误。 这是我的代码:
import selenium
from selenium import webdriver
driver = webdriver.Chrome('path.exe')
url = 'https://www.rottentomatoes.com/m/12_years_a_slave'
driver.get(url)
def scrape_dom(element):
shadow_root = driver.execute_script('return
arguments[0].shadowRoot',element)
retuen shadow_root
host = driver.find_element_by_tag_name('score-board')
root_1 = scrape_dom(host)
views = root_1.find_element_by_link_text(
'/m/12_years_a_slave/reviews?type=user&intcmp=rt-' + \
'scorecard_audience-score-reviews')
我也试过 xpath,css_selector 但总是出错。你能告诉我我的代码有什么问题吗?
解决方法
一个简单的 CSS 选择器在这里工作。
from selenium import webdriver
driver = webdriver.Chrome()
url = 'https://www.rottentomatoes.com/m/12_years_a_slave'
driver.get(url)
print(driver.find_element_by_css_selector('a[slot=audience-count]').text)
我将 100,000+ Ratings
打印到我的控制台。
看看这个 xpath 是否有效:-
driver.find_element_by_xpath(".//a[@data-qa='audience-rating-count']").text
,
你不需要硒。您可以使用 requests
和 bs4
。此外,您可以使用更快的 css 类选择器,而不是目前其他答案中给出的较慢的属性选择器。
import requests
from bs4 import BeautifulSoup as bs
r = requests.get('https://www.rottentomatoes.com/m/12_years_a_slave')
soup = bs(r.content,'lxml')
soup.select_one('.scoreboard__link--audience').text