簡體   English   中英

如何使用 BeautifulSoup 從網站獲取不可見數據

[英]How to get invisible data from website with BeautifulSoup

我需要 fiverr 服務交付時間,但我只能獲得第一個包裹的(基本)交付時間。 如何獲得第二個和第三個包裹的派送時間? 有沒有可能不使用 Selenium 就能得到它?

在此處輸入圖像描述

import requests
from bs4 import BeautifulSoup


response = requests.get("https://www.fiverr.com/volkeins/provide-10x-dofollow-backlinks-from-amazon-da96-permanent")

# BEAUTIFULSOUP

soup = BeautifulSoup(response.text, 'lxml')
print(soup.find_all("b", class_ = "delivery"))

url 包含的動態數據由 JavaScript 和 BeautifulSoup 生成,無法呈現 javaSceipt。因此,您需要類似 selenium 和 BeautifulSoup 的自動化工具。請運行代碼。

import time
from bs4 import BeautifulSoup
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager

url ="https://www.fiverr.com/volkeins/provide-10x-dofollow-backlinks-from-amazon-da96-permanent"
    
driver = webdriver.Chrome(ChromeDriverManager().install())
driver.maximize_window()
time.sleep(8)
driver.get(url)
time.sleep(10)

soup = BeautifulSoup(driver.page_source, 'lxml')
driver.close()


print(soup.find("b", class_ = "delivery").text)

Output:

7 Days Delivery

使用Selenium打印文本7 天交貨,您可以使用以下任一定位器策略

  • 使用css_selectorget_attribute("innerHTML")

     driver.get('https://www.fiverr.com/volkeins/provide-10x-dofollow-backlinks-from-amazon-da96-permanent') print(driver.find_element(By.CSS_SELECTOR, "b.delivery").get_attribute("innerHTML"))
  • 使用xpath文本屬性:

     driver.get('https://www.fiverr.com/volkeins/provide-10x-dofollow-backlinks-from-amazon-da96-permanent') print(driver.find_element(By.XPATH, "//b[@class='delivery']").text)

要理想地提取文本7 天交貨,您需要為visibility_of_element_located()引入WebDriverWait ,並且您可以使用以下任一定位器策略

  • 使用CSS_SELECTOR文本屬性:

     driver.get('https://www.fiverr.com/volkeins/provide-10x-dofollow-backlinks-from-amazon-da96-permanent') print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "b.delivery"))).get_attribute("innerHTML"))
  • 使用XPATHget_attribute("innerHTML")

     driver.get('https://www.fiverr.com/volkeins/provide-10x-dofollow-backlinks-from-amazon-da96-permanent') print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//b[@class='delivery']"))).text)
  • 注意:您必須添加以下導入:

     from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
  • 控制台 Output:

     7 Days Delivery

您可以在How to retrieve the text of a WebElement using Selenium - Python中找到相關討論


參考

鏈接到有用的文檔:

使用requests.get('https://...').text ,您將收到頁面的 html 內容。 問題是大多數現代網站都使用客戶端呈現來構建頁面內容,因此您需要 javascript 來呈現頁面,就像您的 web 瀏覽器一樣。 您可以使用selenium來實現此目的。

暫無
暫無

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

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