Python采集二手車數(shù)據(jù)的超詳細講解
數(shù)據(jù)采集
XPath,XML路徑語言的簡稱。XPath即為XML路徑語言(XML Path Language),它是一種用來確定XML文檔中某部分位置的語言。XPath主要用于解析XML文檔,可以用來獲取XML文檔中某個元素的位置、屬性值等信息。XPath可以用于XML文檔解析、XML數(shù)據(jù)抽取、XML路徑匹配等方面。
發(fā)送請求
首先,我們要進行數(shù)據(jù)來源分析,知道我們的需求是什么?
明確需求:
- 明確采集網(wǎng)站是什么?
- 明確采集數(shù)據(jù)是什么?
車輛基本信息
然后,我們分析車輛基本信息數(shù)據(jù), 具體是請求那個網(wǎng)址可以得到我們想要的數(shù)據(jù)。
通過開發(fā)者工具, 進行抓包分析:
打開開發(fā)者工具: F12 / 鼠標右鍵點擊檢查選擇network
刷新網(wǎng)頁: 讓本網(wǎng)頁數(shù)據(jù)內容重新加載一遍 <方便分析數(shù)據(jù)出處>
搜索數(shù)據(jù)來源: 復制你想要的內容, 進行搜索即可
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ā)者工具定位到標簽位置。
我們通過網(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)頁,看看運行之后的效果吧。
接下來,我們就依次訪問某個鏈接,獲取我們想要的數(shù)據(jù)。
responses = requests.get(detail_url,headers=headers) detail_selector = parsel.Selector(responses.text)
我用不同顏色標注的,就是我們這次想要獲取的數(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)
大家感興趣還可以獲取車輛信息更詳細的數(shù)據(jù),其實原理都是一樣的。
總結
通過本文的學習,我們學習了數(shù)據(jù)采集。我們在采集數(shù)據(jù)的時候,遇到各種問題,自己在嘗試解決問題,也是在一種學習,本次實戰(zhàn),我們明白如何使用xpath解析數(shù)據(jù)。
以上就是Python采集二手車數(shù)據(jù)的超詳細講解的詳細內容,更多關于Python采集二手車數(shù)據(jù)的資料請關注腳本之家其它相關文章!
相關文章
Python實現(xiàn)學生管理系統(tǒng)的代碼(JSON模塊)
這篇文章主要介紹了Python實現(xiàn)學生管理系統(tǒng)的代碼(JSON模塊),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-04-04Jupyter?Notebook出現(xiàn)不是內部或外部的命令解決方案
這篇文章主要介紹了Jupyter?Notebook出現(xiàn)不是內部或外部的命令解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06python通過paramiko復制遠程文件及文件目錄到本地
這篇文章主要為大家詳細介紹了python通過paramiko復制遠程文件及文件目錄到本地,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-04-04詳解在python中如何使用zlib模塊進行數(shù)據(jù)壓縮和解壓縮
Python有一些內置庫用于處理數(shù)據(jù)壓縮和解壓縮,其中一個就是zlib模塊,這個模塊為DEFLATE壓縮算法和相關的gzip(文件格式)提供了支持,在這篇文章中,我們將深入探討如何使用zlib模塊進行數(shù)據(jù)壓縮和解壓縮2023-06-06