簡單靜態一級頁面爬取
爬取汽車之家(泰州)二手車資訊

爬取[‘名稱’,‘公里數’,‘上牌時間’,‘銷售者’,‘價格’]

——————————————開始了———————————————
1.判斷是否為靜態頁面

圖中的文字資訊出現在源代碼中,可以判斷為靜態頁面,
2.分析網址
#第一頁地址:https://www.che168.com/tai_zhou/a0_0msdgscncgpi1lto1cspexx0/

#第二頁地址:https://www.che168.com/tai_zhou/a0_0msdgscncgpi1lto1csp2exx0/

#第三頁地址:https://www.che168.com/tai_zhou/a0_0msdgscncgpi1lto1csp3exx0/

#所以第n頁地址:https://www.che168.com/tai_zhou/a0_0msdgscncgpi1lto1csp{}exx0/
3.正則運算式
網頁源代碼:
<div class="cards-bottom">
<h4 class="card-name">比亞迪F3R 2009款 金鉆版 1.5L 舒適型 GL-i</h4>
<p class="cards-unit">11.3萬公里/2010-03/泰州/商家</p>
<div class="cards-price-box"><span class="pirce"><em>0.88</em>萬</span>
<span class="tags"><i class="tp-tags green" title="車輛過戶次數為0">0次過戶</i></span>
<s>6.39萬</s></div>
<div class="cards-tags-box"></div>
</div>
方法:
(1)相同內容可以保留
(2)無關內容用 .*f 代替
(3)需要的內容用(.*f)代替
所以正則運算式為:
<div class="cards-bottom">.*?<h4 class="card-name">(.*?)</h4>.*?<p class="card.*?">(.*?)</p>.*?<span class="pirce"><em>(.*?)</em>
代碼:
#匯入
import time
import random
import re
import requests
import csv
#創建類
class CarSpider:
def __init__(self):#初始化
self.url = 'https://www.che168.com/tai_zhou/a0_0msdgscncgpi1lto1csp{}exx0/'
#創建User_Agent池
self.header_list = ['Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1',
'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0',
'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50',
'User-Agent:Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50']
self.header = {'User-Agent':random.choice(self.header_list)}
self.f = open('g:carspider.csv','w',newline='',encoding='gb2312')#csv檔案路徑檔案名,編碼方式,每行之間沒有空格
self.writer = csv.writer(self.f)
def get_html(self,url): #獲取html
html = requests.get(url = url,headers = self.header).content.decode('gb2312', 'ignore')#根據網頁原始碼可以看出是gb2312
return html
def re_func(self,regex,html): #決議網頁
pattern = re.compile(regex,re.S)
r_list = pattern.findall(html)
return r_list
def parse_html(self,one_url):#處理網頁
#正則運算式
one_regex = '<div class="cards-bottom">.*?<h4 class="card-name">(.*?)</h4>.*?<p class="card.*?">(.*?)</p>.*?<span class="pirce"><em>(.*?)</em>'
one_html = self.get_html(url=one_url)#獲取網址
r_list = self.re_func(regex=one_regex,html=one_html)#決議網頁
#print(r_list)
self.save_html(r_list)
def save_html(self,r_list):#資料處理
for r in r_list:
# 名稱 公里數 上牌時間 銷售者 銷售價值
li = [r[0].strip(),r[1].split('/')[0].strip(),r[1].split('/')[1].strip(),r[1].split('/')[3].strip(),r[2].strip()+'萬']
self.writer.writerow(li)
def run(self):
li = ['名稱','公里數','上牌時間','銷售者','價格']#csv首行
self.writer.writerow(li)
for offset in range(1,8):
one_url = self.url.format(offset)
self.parse_html(one_url)
time.sleep(random.uniform(0,1))
print('|第{}頁爬取成功|'.format(offset))
print('-'*20)
self.f.close#關閉檔案
if __name__ == '__main__':
start_time = time.time()
print("|執行開始|")
print('-'*20)
spider = CarSpider()
spider.run()
end_time = time.time()
print('|執行結束|')
print('-'*20)
print('|總共執行時間為:{0:.2f}秒|'.format(end_time-start_time))
執行后:

在g盤下會發現一個csv檔案,打開后:


————————————————拉到底了—————————————————
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/267133.html
標籤:python
上一篇:CZSC 官方檔案(0.6.7)
下一篇:藍橋杯集錦01(python3)
