1. 程式人生 > >Python爬蟲之爬取瓜子二手車資訊- requests方法

Python爬蟲之爬取瓜子二手車資訊- requests方法

最近在做二手車市場資料分析,試著爬取瓜子二手車在售車輛資訊,做一下記錄

大致思路如下:

2、從a連結頁面獲取每輛車詳情頁的連結b

3、進入b抓取我需要的車輛資訊:    

car_model = Field()             # 車型資訊
registertime = Field()          # 上牌日期
mileage = Field()               # 行駛里程
sec_price = Field()             # 二手車報價
new_price = Field()             # 新車指導價(含稅) daiqueding
registeraddress = Field()       # 所在地
displacement = Field()          # 排放標準

1、頁碼連結構造比較簡單,如圖:

2、詳情頁連結構造如圖

3、詳情資訊結構也比較好找

附上原始碼如下:

# -*- coding: utf-8 -*-
# 僅供交流學習
import requests
from pyquery import PyQuery as pq
import time,random


#請求頭 cookie 必須需要加上,爬前request網址試下可以get到全內容不,不能的話換下cookie
headers = {'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
           'Accept-Encoding':'gzip, deflate,br',
           'Accept-Language':'zh-CN,zh;q=0.9',
           'Cache-Control':'no-cache',
           'Connection':'keep-alive','Cookie':'uuid=02724092-c319-4ba3-89e5-7bf432065f79; ganji_uuid=1367370650065045912399; Hm_lvt_936a6d5df3f3d309bda39e92da3dd52f=1528970077,1528970098; cityDomain=sz; lg=1; clueSourceCode=%2A%2300; sessionid=7273bfb7-b191-4334-f256-30ec9febf860; cainfo=%7B%22ca_s%22%3A%22sem_baiduss%22%2C%22ca_n%22%3A%22bdpc_sye%22%2C%22ca_i%22%3A%22-%22%2C%22ca_medium%22%3A%22-%22%2C%22ca_term%22%3A%22%25E4%25BA%258C%25E6%2589%258B%25E8%25BD%25A6%22%2C%22ca_content%22%3A%22-%22%2C%22ca_campaign%22%3A%22-%22%2C%22ca_kw%22%3A%22-%22%2C%22keyword%22%3A%22-%22%2C%22ca_keywordid%22%3A%2249888355177%22%2C%22scode%22%3A%2210103188612%22%2C%22ca_transid%22%3Anull%2C%22platform%22%3A%221%22%2C%22version%22%3A1%2C%22client_ab%22%3A%22-%22%2C%22guid%22%3A%2202724092-c319-4ba3-89e5-7bf432065f79%22%2C%22sessionid%22%3A%227273bfb7-b191-4334-f256-30ec9febf860%22%7D; antipas=2496334kL545T396w008C21ez41; preTime=%7B%22last%22%3A1531722065%2C%22this%22%3A1528850701%2C%22pre%22%3A1528850701%7D',
           'Host':'www.guazi.com',
           'Pragma':'no-cache',
           'Referer':'https://www.guazi.com/sz/buy/o1r3_16_6/',
           'Upgrade-Insecure-Requests':'1',
           'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'}
# headers ={
#     'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36',
#     # cookie 必須需要加上,爬前request網址試下可以get到全內容不,不能的話換下cookie
#     'Cookie':'uuid=2276c0ec-9654-440b-b583-788b4a4b7788; ganji_uuid=1526893422532532003974; lg=1; Hm_lvt_936a6d5df3f3d309bda39e92da3dd52f=1531222100; clueSourceCode=10103000312%2300; antipas=2496334IBPB545K39a6U008T21x41; sessionid=94cd5b73-23cf-4515-d5a1-b7b03461d083; cainfo=%7B%22ca_s%22%3A%22pz_baidu%22%2C%22ca_n%22%3A%22tbmkbturl%22%2C%22ca_i%22%3A%22-%22%2C%22ca_medium%22%3A%22-%22%2C%22ca_term%22%3A%22-%22%2C%22ca_content%22%3A%22-%22%2C%22ca_campaign%22%3A%22-%22%2C%22ca_kw%22%3A%22-%22%2C%22keyword%22%3A%22-%22%2C%22ca_keywordid%22%3A%22-%22%2C%22scode%22%3A%2210103000312%22%2C%22ca_transid%22%3Anull%2C%22platform%22%3A%221%22%2C%22version%22%3A1%2C%22client_ab%22%3A%22-%22%2C%22guid%22%3A%222276c0ec-9654-440b-b583-788b4a4b7788%22%2C%22sessionid%22%3A%2294cd5b73-23cf-4515-d5a1-b7b03461d083%22%7D; close_finance_popup=2018-07-16; cityDomain=sz; preTime=%7B%22last%22%3A1531725774%2C%22this%22%3A1531222098%2C%22pre%22%3A1531222098%7D'
# }
# 代理ip
proxies = {
    'http':'http://60.177.231.103:18118',
    'https':'http://60.177.231.103:18118'
}
# proxies = {
#     'http':'http://60.177.226.225:18118',
#     'https':'http://60.177.226.225:18118'
# }
# proxies = {
#     'http':'http://14.118.252.228:6666',
#     'https':'http://14.118.252.228:6666'
# }


class GuaziSpider():

    # 初始化爬蟲
    def __init__(self):
        # 目標url
        self.baseurl = 'https://www.guazi.com'
        '''
        在進行介面測試的時候,我們會呼叫多個介面發出多個請求,在這些請求中有時候需要保持一些共用的資料,例如cookies資訊。
        requests庫的session物件能夠幫我們跨請求保持某些引數,也會在同一個session例項發出的所有請求之間保持cookies。
        '''
        self.s = requests.Session()
        self.s.headers = headers
        # 本地ip被封的話啟用該處ip代理池
        # self.s.proxies = proxies
        # 其中www代表瓜子二手車全國車源,如果只想爬某個城市的,如深圳的用sz替換www
        self.start_url = 'https://www.guazi.com/www/buy/'
        self.infonumber = 0     # 用來記錄爬取了多少條資訊用

    # get_page用來獲取url頁面
    def get_page(self, url):
        return pq(self.s.get(url).text)

    # page_url用來生成第n到第m頁的翻頁連結
    def page_url(self,n,m):
        page_start = n
        page_end = m
        # 新建空列表用來存翻頁連結
        page_url_list = []
        for i in range(page_start,page_end+1,1):
            base_url = 'https://www.guazi.com/www/buy/o{}/#bread'.format(i)
            page_url_list.append(base_url)

        return page_url_list

    # detail_url用來抓取詳情頁連結
    def detail_url(self, start_url):
        # 獲取star_url頁面
        content = self.get_page(start_url)
        # 解析頁面,獲取詳情頁連結content=pq(self.s.get(start_url).text)
        for chref in content('ul[@class="carlist clearfix js-top"]  > li > a').items():
            url = chref.attr.href
            detail_url = self.baseurl + url
            yield detail_url

    # carinfo用來抓取每輛車的所需資訊
    def carinfo(self, detail_url):
        content = self.get_page(detail_url)
        d = {}
        d['model'] = content('h2.titlebox').text().strip()                                          # 車型
        d['registertime'] = content('ul[@class="assort clearfix"] li[@class="one"] span').text()    # 上牌時間
        d['mileage'] = content('ul[@class="assort clearfix"] li[@class="two"] span').text()         # 表顯里程
        d['secprice'] = content('span[@class="pricestype"]').text()                                 # 報價
        d['newprice'] = content('span[@class="newcarprice"]').text()                                # 新車指導價(含稅)
        d['address'] = content('ul[@class="assort clearfix"]').find('li').\
                        eq(2).find('span').text()                                                   # 上牌地
        d['displacement'] = content('ul[@class="assort clearfix"]').\
                            find('li').eq(3).find('span').text()                                    # 排量
        return d


    def run(self,n,m):
        page_start = n
        page_end = m
        with open('guazidata{}to{}.txt'.format(page_start,page_end),'a',encoding='utf-8') as f:
            for pageurl in self.page_url(page_start,page_end):
                print(pageurl)
                print("讓俺歇歇10-15秒啦,太快會關小黑屋的!")
                time.sleep(random.randint(10, 15))
                for detail_url in self.detail_url(pageurl):
                    print(detail_url)
                    d = self.carinfo(detail_url)
                    f.write(d['model']+',')
                    f.write(d['registertime'] + ',')
                    f.write(d['mileage'] + ',')
                    f.write(d['secprice'] + ',')
                    f.write(d['newprice'] + ',')
                    f.write(d['address'] + ',')
                    f.write(d['displacement'] + '\n')
                    time.sleep(0.3)
                    self.infonumber += 1
                    print('爬了%d輛車,continue!'%self.infonumber)
                print('+'*10)


if __name__ == '__main__':
    gzcrawler = GuaziSpider()
    # 這兒改數字,例如:爬取第1頁到第100頁的資訊
    gzcrawler.run(1,100)

總結:

1、最開始沒加cookie,然後get不全網頁,然後不知道為何,本機chrome裡得到的cookie怎麼也不好使,這兒需要繼續研究,希望懂得給說道一下。當時對比檢視我要買車跟我要賣車獲得的js,一度以為這些頁面是js渲染防爬的,都想放棄了,幸好叫別人試了一下,才發現只要加cookie就好,我只能copy別人電腦的cookie

未加cookie,get不全資訊顯示是這樣子的:

2、爬取速度過快會被封IP,只能換代理IP解決;同時速度稍快,中間就會出現爬幾頁然後跳過幾頁不爬的情況,大概每7頁只能爬取一頁,而且40輛車還爬不完全,原因也想不明白。具體閾值沒測試,因為不急著用資料,就開了幾個終端使用幾個代理ip掛著慢點爬。

相關推薦

Python爬蟲瓜子二手車資訊- requests方法

最近在做二手車市場資料分析,試著爬取瓜子二手車在售車輛資訊,做一下記錄 大致思路如下: 2、從a連結頁面獲取每輛車詳情頁的連結b 3、進入b抓取我需要的車輛資訊:     car_model = Field() # 車型資訊 registe

Python scrapy框架瓜子二手車資訊資料

專案實施依賴: python,scrapy ,fiddler scrapy安裝依賴的包: 可以到https://www.lfd.uci.edu/~gohlke/pythonlibs/  下載 pywin32,lxml,Twisted,scrapy然後pip安裝 專案實施開始: 1、建立scrapy專

Python爬蟲煎蛋網妹子圖

創建目錄 req add 註意 not 相同 esp mpi python3 這篇文章通過簡單的Python爬蟲(未使用框架,僅供娛樂)獲取並下載煎蛋網妹子圖指定頁面或全部圖片,並將圖片下載到磁盤。 首先導入模塊:urllib.request、re、os import

python3 學習 3:python爬蟲動態載入的圖片,以百度圖片為例

轉: https://blog.csdn.net/qq_32166627/article/details/60882964 前言: 前面我們爬取圖片的網站都是靜態的,在頁面中右鍵檢視原始碼就能看到網頁中圖片的位置。這樣我們用requests庫得到頁面原始碼後,再用bs4庫解析標籤即可儲存圖片

Python爬蟲網站電影資訊

以爬取電影天堂喜劇片前5頁資訊為例,程式碼如下: 1 # coding:UTF-8 2 3 import requests 4 import re 5 6 def mov(): 7 headers={'User-Agent':'Mozilla/5.0 (Windo

Python爬蟲各大幣交易網站公告——靜態網站.md

Python爬蟲之爬取各大幣交易網站公告——靜態網站 瞭解爬蟲之後,我們也漸漸掌握了根據網站的種類選擇不同庫來對其進行處理,提取我們想要的東西。 靜態網站,我們往往利用requests庫提取網站html資訊,再通過正則表示式或BeautifulSoup庫提取我們

python學習(7):python爬蟲動態載入的圖片,以百度圖片為例

前言: 前面我們爬取圖片的網站都是靜態的,在頁面中右鍵檢視原始碼就能看到網頁中圖片的位置。這樣我們用requests庫得到頁面原始碼後,再用bs4庫解析標籤即可儲存圖片到本地。 當我們在看百度圖片時,右鍵–檢查–Elements,點選箭頭,再用箭頭點選圖片時

Python爬蟲動態頁面資料

很多網站通常會用到Ajax和動態HTML技術,因而只是使用基於靜態頁面爬取的方法是行不通的。對於動態網站資訊的爬取需要使用另外的一些方法。 先看看如何分辨網站時靜態的還是動態的,正常而言含有“檢視更多”字樣或者開啟網站時下拉才會載入內容出來的進本都是動態的,簡便的方法就是在

Python爬蟲知乎帖子並儲存到mysql(以及遇到問題和解決方法

爬取問題標題並儲存到資料庫: 程式碼: # coding=utf-8 import urllib import urllib2 import re import MySQLdb #co

Python爬蟲內涵吧段子(urllib.request)

引言 在寒假開始的時候就打算學習爬蟲了,但是沒有想到一入坑到現在還沒有出坑,說多了都是淚 T_T 我準備介紹的這個庫是我初學爬蟲時候用到的,比較古老,所以我只用了一兩次就轉向了requests了

python --爬蟲基礎 --今日頭條 使用 requests 庫的基本操作, Ajax

'''思路一: 由於是Ajax的網頁,需要先往下劃幾下看看XHR的內容變化二:分析js中的程式碼內容三:獲取一頁中的內容四:獲取圖片五:儲存在本地使用的庫1. requests 網頁獲取庫 2.from urllib.parse import urlencode 將字典轉化為字串內容整

python實戰網路爬蟲網頁新聞資訊列表)

關於大資料時代的資料探勘 (1)為什麼要進行資料探勘:有價值的資料並不在本地儲存,而是分佈在廣大的網路世界,我們需要將網路世界中的有價值資料探勘出來供自己使用 (2)非結構化資料:網路中的資料大多是非結構化資料,如網頁中的資料都沒有固定的格式 (3)非結構化資料的挖掘--ETL:即三個步

Python網路爬蟲淘寶網頁頁面 MOOC可以執行的程式碼

可以實現功能的全部程式碼: import requests import re def getHTMLText(url): try: r = requests.get(url, timeout = 30) r.raise_for_statu

Python爬蟲專案--某寶男裝資訊

本次爬取用到的知識點有: 1. selenium 2. pymysql 3  pyquery 正文 1. 分析目標網站 1. 開啟某寶首頁, 輸入"男裝"後點擊"搜尋", 則跳轉到"男裝"的搜尋介面. 2. 空白處"右擊"再點選"檢查"審查網頁元素, 點選"Network". 1) 找到對應的URL, URL

python爬蟲3——騰訊招聘全部招聘資訊

python爬蟲2中,已經有了初步的程式碼,之後做了優化 增加了工作職責、工作要求: 獲取的資料有: 程式碼如下: #!/usr/bin/env python # -*- coding:utf-8 -*- from bs4 import BeautifulS

(轉)python爬蟲例項——智聯招聘資訊

受友人所託,寫了一個爬取智聯招聘資訊的爬蟲,與大家分享。 本文將介紹如何實現該爬蟲。 目錄 網頁分析 網頁的組織結構如下: 將網頁程式碼儲存為html檔案(檔案見

Python爬蟲微信公眾號文章資訊準備工作

有一天發現我關注了好多微信公眾號,那時就想有沒有什麼辦法能夠將微信公眾號的文章弄下來,而且還想將一些文章的精彩評論一起搞下來。參考了一些文章,通過幾天的研究基本上實現了自己的要求,現在記錄一下自己的一些心得。 整個研究過程如下: 1.瞭解微信公眾號文章連結的組成,歷史文章API組成,單個文章

python初級實戰系列教程《一、爬蟲網頁、圖片、音視訊》

python基礎知識可以到廖雪峰大佬的官網學習哦! 廖雪峰官網網址 學完python就開始我們的實戰吧!首先我們就來學習下python爬蟲 學習Python爬蟲,先是介紹一個最容易上手的庫urll

python爬蟲例項——智聯招聘資訊

受友人所託,寫了一個爬取智聯招聘資訊的爬蟲,與大家分享。 本文將介紹如何實現該爬蟲。 目錄 網頁分析 網頁的組織結構如下: 將網頁程式碼儲存為html檔案(檔案見最後連結),使用的軟體是Sublime Text,我們所需的內容如下圖所示:

python爬蟲實戰 汽車家上車型價格

相關庫 import pymysql import pymysql.cursors from bs4 import BeautifulSoup import requests import random