簡體   English   中英

無法使用請求從網頁中獲取某些字段

[英]Unable to grab some fields from a webpage using requests

我正在嘗試使用requests模塊從該網頁獲取不同容器的標題和鏈接,但我找不到任何方法來做到這一點。 我試圖找到任何隱藏的 API 通常出現在開發工具中,但我失敗了。 我注意到不同的時間,大多數時候動態生成的內容在某些腳本標簽中可用。 但是,在這種情況下,我也無法在其中找到內容。 作為最后的手段,我使用了 Selenium 來抓住它們。

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

link = 'https://www.firmy.cz/kraj-praha?q=prodej+kol'

def get_content(url):
    driver.get(url)
    for item in wait.until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR,'.companyDetail'))):
        item_link = item.find_element_by_css_selector("h3 > a.companyTitle").get_attribute("href")
        item_title = item.find_element_by_css_selector("span.title").text
        yield item_link,item_title

if __name__ == '__main__':
    with webdriver.Chrome() as driver:
        wait = WebDriverWait(driver,10)
        for item in get_content(link):
            print(item)

腳本產生的結果如下:

('https://www.firmy.cz/detail/12824790-bike-gallery-s-r-o-praha-vokovice.html', 'Bike Gallery s.r.o.')
('https://www.firmy.cz/detail/13162651-bikeprodejna-cz-praha-dolni-chabry.html', 'BIKEPRODEJNA.CZ')
('https://www.firmy.cz/detail/406369-bikestore-cz-praha-podoli.html', 'Bikestore.cz')
('https://www.firmy.cz/detail/12764331-shopbike-cz-praha-ujezd-nad-lesy.html', 'Shopbike.cz')

如何使用 requests 模塊獲取相同的結果?

分析了原始頁面源后,解決方案似乎非常簡單 - 您必須將 append 附加_escaped_fragment_= URL 參數添加到您的鏈接。 例如,一個簡單的 Python 腳本獲取所需內容可以如下:

import requests
r = requests.get('https://www.firmy.cz/kraj-praha?q=prodej+kol&_escaped_fragment_=')
print (r.content)

下面的 Python 腳本使用requests和解析收到的響應來模擬您當前的實現:

import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin

base = 'https://www.firmy.cz'
link = 'https://www.firmy.cz/kraj-praha?q=prodej+kol&_escaped_fragment_='

def get_info(url):
    r = requests.get(url)
    soup = BeautifulSoup(r.text,"lxml")
    for item in soup.select(".companyDetail"):
        item_link = urljoin(base,item.select_one("h3 > a.companyTitle")['href'])
        item_title = item.select_one("span.title").get_text(strip=True)
        yield item_link,item_title

if __name__ == '__main__':
    for item in get_info(link):
        print(item)

在執行之前,請確保您已通過在cmd中運行以下命令來安裝所需的庫:

pip install bs4
pip install html5lib
pip install lxml

暫無
暫無

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

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