爬取简单静态网站——汽车之家二手车

简单静态一级页面爬取

爬取汽车之家(泰州)二手车信息

在这里插入图片描述
爬取[‘名称’,‘公里数’,‘上牌时间’,‘销售者’,‘价格’]
在这里插入图片描述
——————————————开始了———————————————

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文件,打开后:

在这里插入图片描述

在这里插入图片描述
————————————————拉到底了—————————————————

  • 10
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 29
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

互动创客坊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值