情況:
我正在嘗試使用 scrapy 抓取廣告網站。我可以從與我相關的標簽中訪問和提取資訊,但是,“價格”標簽不愿意提供文本。
我嘗試過的:
對于價格標簽,我嘗試了不同的方法,即 css 選擇器和 xpath,但沒有證明有效。
response.css('span.ma-AdPrice-value.ma-AdPrice-value--default.ma-AdPrice-value--heading--l::text').get()
response.xpath("//span[@class='ma-AdPrice-value ma-AdPrice-value--default ma-AdPrice-value--heading--l']/text()").get()
我response在終端中嘗試了不同的呼叫scrapy shell,包括在上層標簽級別提取資料,但沒有成功。
代碼:
下面是代碼的摘錄。標題標簽(和其他標簽)作業正常,價格標簽是這里的問題。
網址:https : //www.milanuncios.com/volkswagen-de-segunda-mano/volkswagen-golf-2-0-tdi-184cv-dsg-gtd-bmt-409202986.htm
class AdSpider(scrapy.Spider):
name = 'ads'
start_urls = [
'https://www.milanuncios.com/volkswagen-de-segunda-mano/volkswagen-golf-2-0-tdi-184cv-dsg-gtd-bmt-409202986.htm'
]
def parse(self, response):
title = response.css('h1.ma-AdDetail-title.ma-AdDetail-title-size-heading-m::text').get()
price = response.css('span.ma-AdPrice-value.ma-AdPrice-value--default.ma-AdPrice-value--heading--l::text').get()
items['title'] = title
items['price'] = price
yield items
問題: 我沒有網頁抓取經驗,所以網站 html 代碼中是否有任何我沒有看到的隱藏功能?我怎么能解決這個問題?
uj5u.com熱心網友回復:
這里的問題似乎是該頁面需要 JavaScript。
使用 requests 和 BeautifulSoup 運行測驗時:
>>> import requests
>>> from bs4 import BeautifulSoup as bs
>>> res = requests.get("https://www.milanuncios.com/volkswagen-de-segunda-mano/volkswagen-golf-2-0-tdi-184cv-dsg-gtd-bmt-409202986.htm")
>>> soup = bs(res.text, "lxml")
>>> soup.find("span", text="Precio financiado")
未找到該專案,因為它引發了一個錯誤,要求 javascript 與機器人保護一起繼續。
使用硒收集時:
>>> from selenium import webdriver
>>> from bs4 import BeautifulSoup as bs
>>> path ="path_to_executable"
>>> driver = webdriver.Firefox(executable_path=path)
>>> driver.get("https://www.milanuncios.com/volkswagen-de-segunda-mano/volkswagen-golf-2-0-tdi-184cv-dsg-gtd-bmt-409202986.htm")
>>> soup = bs(driver.page_source, "lxml")
>>> soup.find("span", text="Precio financiado").findNext("span").text
回傳了預期的價格。
要解決這個問題,您要么需要考慮將 selenium 合并到 scrapy 中,要么僅使用 selenium 來收集資料。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/341170.html
