[英]Web scraping in python returns []
我是 python 網絡抓取的新手。
我正在嘗試制作一個程序,從 GoDaddy 域注冊商處抓取域名及其值。 但是,在嘗試獲取域名時,返回的值為 []。
url = 'https://uk.godaddy.com/domainsearch/find?checkAvail=1&domainToCheck=rocket'
response = requests.get(url)
if not response.ok:
print('The server responded:', response.status_code)
else:
soup = BeautifulSoup(response.text, 'lxml')
domain = soup.find_all('span',class_="domain-name-text h4 text-bold")
print(domain)
這是包含我需要的數據的 HTML 段:
<span data-cy="spin-results-wrap-domain-name" dir="ltr">
<span class="domain-name-text h4 text-bold">rockethub</span>
<span class="domain-name-text h4 text-bold domain-name-tld">.</span>
<span class="domain-name-text h4 text-bold domain-name-tld">co</span>
</span>
安裝了所有必需的包:bs4、lxml 和 requests。
對此的任何幫助表示贊賞。
看起來 GoDaddy.com 通過 JavaScript 呈現其網頁,並且請求包沒有加載 JavaScript 的功能。
也許看看圖書館selenium 。 它是一個無頭 Web 瀏覽器,將為您呈現 JavaScript,這意味着它將加載您嘗試抓取的域名。
硒代碼片段:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from bs4 import BeautifulSoup
driver = webdriver.Chrome() # You will be required to setup a chrome driver.
driver.get('https://uk.godaddy.com/domainsearch/find?checkAvail=1&domainToCheck=rocket')
try:
WebDriverWait(driver, 5).until(
EC.presence_of_element_located((By.CLASS_NAME, "spin-results-wrap"))
) # You need to wait for the webpage to render the domains (its an asynchronous web request made).
except TimeoutException:
raise
html = driver.page_source
soup = BeautifulSoup(html, "html.parser") # Also note I use the html.parser instead of lxml.
domain = soup.find_all('span', class_="domain-name-text h4 text-bold")
print(domain)
這是一個關於如何為 Selenium 設置 ChromeDriver 的好教程:鏈接。
對於這種用法,我推薦你使用selenium,在我看來使用起來要簡單得多。 硒代碼:
from selenium import webdriver
from selenium.webdriver import Chrome
driver = webdriver.Chrome(r'path/to/your/chromedriver')
driver.get(your_url)
domain = driver.find_element_by_class_name(class_of_the_element)
#domain = class.WebElement--> domain.text to retrieve the string.
下載 chromedriver: https ://chromedriver.chromium.org/downloads
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.