Python采集二手車數(shù)據(jù)的超詳細(xì)講解
數(shù)據(jù)采集
XPath,XML路徑語言的簡稱。XPath即為XML路徑語言(XML Path Language),它是一種用來確定XML文檔中某部分位置的語言。XPath主要用于解析XML文檔,可以用來獲取XML文檔中某個元素的位置、屬性值等信息。XPath可以用于XML文檔解析、XML數(shù)據(jù)抽取、XML路徑匹配等方面。
發(fā)送請求
首先,我們要進(jìn)行數(shù)據(jù)來源分析,知道我們的需求是什么?
明確需求:
- 明確采集網(wǎng)站是什么?
- 明確采集數(shù)據(jù)是什么?
車輛基本信息
然后,我們分析車輛基本信息數(shù)據(jù), 具體是請求那個網(wǎng)址可以得到我們想要的數(shù)據(jù)。
通過開發(fā)者工具, 進(jìn)行抓包分析:
打開開發(fā)者工具: F12 / 鼠標(biāo)右鍵點(diǎn)擊檢查選擇network
刷新網(wǎng)頁: 讓本網(wǎng)頁數(shù)據(jù)內(nèi)容重新加載一遍 <方便分析數(shù)據(jù)出處>
搜索數(shù)據(jù)來源: 復(fù)制你想要的內(nèi)容, 進(jìn)行搜索即可
import requests
url = 'https://www.che168.com/china/a0_0msdgscncgpi1ltocsp1exx0/'
header = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36'}
res = requests.get(url,headers=headers)
我們和之前一樣,獲取數(shù)據(jù),我們會發(fā)現(xiàn),車輛的基本信息就在網(wǎng)頁源代碼中,我們今天就用xpath的方法來解析數(shù)據(jù)。
解析數(shù)據(jù)
接下來,我們用xpath解析數(shù)據(jù)。我們用開發(fā)者工具定位到標(biāo)簽位置。

我們通過網(wǎng)頁源代碼,我們可以獲取到每一個網(wǎng)頁的url。
selector=parsel.Selector(res.text)
detail_url_list = selector.xpath('//ul[@class="viewlist_ul"]/li/a[@class="carinfo"]/@href').getall()
我們可以看到,得到下面數(shù)據(jù)。

我們會發(fā)現(xiàn),我們得到了兩種網(wǎng)頁,所以,在這里我們拼接網(wǎng)頁就需要注意,這里,我不多說,直接看我是怎么寫的。
if detail_url.split('/') == '':
detail_url = 'https:'+detail_url
else:
detail_url = 'https://www.che168.com'+detail_url
這樣,我們就得到了每一個車輛信息的數(shù)據(jù)網(wǎng)頁,看看運(yùn)行之后的效果吧。

接下來,我們就依次訪問某個鏈接,獲取我們想要的數(shù)據(jù)。
responses = requests.get(detail_url,headers=headers)
detail_selector = parsel.Selector(responses.text)

我用不同顏色標(biāo)注的,就是我們這次想要獲取的數(shù)據(jù),我們這里以車輛名稱為例,講解下path如何寫。
title = detail_selector.xpath('string(//h3[@class="car-brand-name"])').get("").strip()
我們看看網(wǎng)頁源代碼是如何得到的xpath。

可能有人就要問了,這個
("").strip()
是什么意思?這個就是去除空格的,只是為了后期數(shù)據(jù)的美觀。
后面的我就不一一展示了,我直接放代碼了,不懂的在評論區(qū)交流。
tableShowMileage = detail_selector.xpath('//ul[@class="brand-unit-item fn-clear"]/li[1]/h4/text()').get("").strip()
theRegistrationTime = detail_selector.xpath('//ul[@class="brand-unit-item fn-clear"]/li[2]/h4/text()').get("").strip()
blockADisplacement = detail_selector.xpath('//ul[@class="brand-unit-item fn-clear"]/li[3]/h4/text()').get("").strip()
addr = detail_selector.xpath('//ul[@class="brand-unit-item fn-clear"]/li[4]/h4/text()').get("").strip()
guobiao = detail_selector.xpath('//ul[@class="brand-unit-item fn-clear"]/li[5]/h4/text()').get("").strip()
price = detail_selector.xpath('string(//span[@id="overlayPrice"])').get()
我們打印這些數(shù)據(jù),看看效果吧。

可能大家注意到了,有返回空值的,這個可能就是被反爬,大家感興趣可以用代理IP試試。
保存數(shù)據(jù)
和我們上一篇一樣,我們先寫入字典,然后在寫入csv文件里面。
dit ={
'車輛':title,
'表顯里程':tableShowMileage,
'上牌時間':theRegistrationTime,
'擋位/排量':blockADisplacement,
'車輛所在地':addr,
'查看限遷地':guobiao,
'價格':price,
}
csv_writer.writerow(dit)
大家感興趣還可以獲取車輛信息更詳細(xì)的數(shù)據(jù),其實(shí)原理都是一樣的。
總結(jié)
通過本文的學(xué)習(xí),我們學(xué)習(xí)了數(shù)據(jù)采集。我們在采集數(shù)據(jù)的時候,遇到各種問題,自己在嘗試解決問題,也是在一種學(xué)習(xí),本次實(shí)戰(zhàn),我們明白如何使用xpath解析數(shù)據(jù)。
以上就是Python采集二手車數(shù)據(jù)的超詳細(xì)講解的詳細(xì)內(nèi)容,更多關(guān)于Python采集二手車數(shù)據(jù)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python中內(nèi)置函數(shù)filter函數(shù)用法詳解
filter()函數(shù)是Python內(nèi)置的另一個有用的高階函數(shù),filter()函數(shù)接收一個函數(shù)f和一個序列,函數(shù)f的作用是對每個元素進(jìn)行判斷,返回True或False,下面這篇文章主要給大家介紹了關(guān)于Python中內(nèi)置函數(shù)filter函數(shù)用法的相關(guān)資料,需要的朋友可以參考下2024-05-05
python中struct模塊之字節(jié)型數(shù)據(jù)的處理方法
今天小編就為大家分享一篇python中struct模塊之字節(jié)型數(shù)據(jù)的處理方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08
如何使用python實(shí)現(xiàn)模擬鼠標(biāo)點(diǎn)擊
這篇文章主要介紹了如何使用python實(shí)現(xiàn)模擬鼠標(biāo)點(diǎn)擊,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-01-01
python實(shí)現(xiàn)監(jiān)控某個服務(wù) 服務(wù)崩潰即發(fā)送郵件報告
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)監(jiān)控某個服務(wù),服務(wù)崩潰發(fā)送郵件報告,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-06-06
matplotlib之Font family [‘sans-serif‘] not&nbs
本文主要介紹了matplotlib之Font family [‘sans-serif‘] not found的問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
Python2.7基于笛卡爾積算法實(shí)現(xiàn)N個數(shù)組的排列組合運(yùn)算示例
這篇文章主要介紹了Python2.7基于笛卡爾積算法實(shí)現(xiàn)N個數(shù)組的排列組合運(yùn)算,涉及Python笛卡爾積算法及排列組合操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-11-11

