![](/img/trans.png)
[英]How to get the json data in a var script from a website using 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_selector和get_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"))
使用XPATH和get_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中找到相關討論
鏈接到有用的文檔:
get_attribute()
方法Gets the given attribute or property of the element.
text
屬性返回The text of the element.
使用requests.get('https://...').text
,您將收到頁面的 html 內容。 問題是大多數現代網站都使用客戶端呈現來構建頁面內容,因此您需要 javascript 來呈現頁面,就像您的 web 瀏覽器一樣。 您可以使用selenium來實現此目的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.