簡體   English   中英

如何從Python的Google功能中提取文本?

[英]How to extract the text from Google features in Python?

用Google功能,例如,當您輸入Google時“我感到很好奇”,第一個結果是一個隨機的事實,然后您得到了基本結果。 我想做的是在Python中提取隨機事實的文本。 我嘗試使用庫requestsbs4 我注意到在requests庫中找不到隨機事實功能。

還有其他提取文字的方法嗎?

可以使用Selenium WebDriver和Python通過UI提取文本。 但是,由於每次加載頁面時更改的類名稱,選擇器將不穩定。 例如,用於獲取問題文本的xpath類似於//*[@id="rso"]/div/div/div/div/div/div/div/div/div[1]/div

順便說一句,有可能。 看下面的例子:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--disable-gpu")
chrome_options.add_experimental_option("prefs", {"profile.default_content_setting_values.notifications": 2})
browser = webdriver.Chrome(chrome_options=chrome_options)

browser.get("https://www.google.com")
search_box= browser.find_element_by_id("lst-ib")
search_box.send_keys("I'm feeling curious")
search_box.submit()
wait = WebDriverWait(browser, 5)
question = wait.until(EC.presence_of_element_located((By.XPATH, '//*[@id="rso"]/div/div/div/div/div/div/div/div/div[1]/div')))
answer = wait.until(EC.presence_of_element_located((By.XPATH, '//*[@id="rso"]/div/div/div/div/div/div/div/div/div[2]/div')))
from time import sleep
count = 3
while not answer.text:
    if not count: break
    sleep(1)
    answer = browser.find_element_by_xpath('//*[@id="rso"]/div/div/div/div/div/div/div/div/div[2]/div')
url = wait.until(EC.presence_of_element_located((By.XPATH, '//*[@id="rso"]/div/div/div/div/div/div/div/div/div/p/a'))).get_attribute('href')

print('Question: {} \nAnswer: {}\nUrl: {}'.format(question.text, answer.text, url))

如果安裝Selenium,則可以運行此代碼,如果需要,還可以運行其他依賴項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM