簡體   English   中英

python中的網頁抓取返回[]

[英]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.

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