抓取 Google 搜索页面时无输出

No output while scraping Google search page

我正在尝试从 Google 搜索结果中抓取蓝色突出显示的部分,如下所示:

当我使用检查元素时,它显示:span class="YhemCb"。我尝试过使用各种 soup.findsoup.find_all 命令,但我尝试过的一切都没有 到目前为止的输出。我应该使用什么命令来抓取这部分内容?

Google 使用 javascript 来显示其大部分 Web 元素,因此不幸的是,使用 requestsBeautifulSoup 之类的东西是不够的。

相反,请使用 selenium!它本质上允许您使用代码控制浏览器。

首先,您需要导航到要抓取的 google 页面

google_search = 'https://www.google.com/search?q=courtyard+by+marriott+fayetteville+fort+bragg'
driver.get(google_search)

然后,您必须等到评论页面在浏览器中加载。

这是使用 WebDriverWait 完成的:您必须指定需要出现在页面上的元素。 [data-attrid="kc:/local:one line summary"] span css select 或者允许我 select 关于酒店的评论信息。

timeout = 10
expectation = EC.presence_of_element_located((By.CSS_SELECTOR, '[data-attrid="kc:/local:one line summary"] span'))
review_element = WebDriverWait(driver, timeout).until(expectation)

最后,打印评分

print(review_element.get_attribute('innerHTML'))

这里是完整的代码,以备您尝试使用

import chromedriver_autoinstaller
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait

# setup selenium (I am using chrome here, so chrome has to be installed on your system)
chromedriver_autoinstaller.install()
options = Options()
options.headless = True
driver = webdriver.Chrome(options=options)

# navigate to google
google_search = 'https://www.google.com/search?q=courtyard+by+marriott+fayetteville+fort+bragg'
driver.get(google_search)

# wait until the page loads
timeout = 10
expectation = EC.presence_of_element_located((By.CSS_SELECTOR, '[data-attrid="kc:/local:one line summary"] span'))
review_element = WebDriverWait(driver, timeout).until(expectation)

# print the rating
print(review_element.get_attribute('innerHTML'))

注意 Google 是出了名的防御任何试图抓取它们的人。在最初的几次尝试中,您可能会成功,但最终您将不得不处理 Google 验证码。

要解决这个问题,我建议您使用搜索引擎抓取工具,例如 quickstart guide 来帮助您入门!

免责声明:我在 Oxylabs.io

工作