成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

scrapy汽車之家車型的簡(jiǎn)單爬取

zhangfaliang / 3290人閱讀

摘要:汽車之家車型的簡(jiǎn)單爬取名字自定義配置重新定義起始爬取點(diǎn)所有首字母按照首字母,組合對(duì)應(yīng)的頁(yè)面,壓入根據(jù),抓取頁(yè)面定義默認(rèn)的抓取函數(shù)品牌編號(hào)品牌名品牌品牌小類別品牌小類別對(duì)應(yīng)的頁(yè)面品牌小類別的編號(hào)品牌小類別名品牌小類別對(duì)應(yīng)的頁(yè)面的

汽車之家車型的簡(jiǎn)單爬取
spider

# -*- coding: utf-8 -*-
import scrapy
from scrapy import Request
from mininova.items import carItem
import sys
reload(sys)
sys.setdefaultencoding("utf8")
class SplashSpider(scrapy.Spider):
    #spider名字
    name = "car_home"
    allowed_domains = ["autohome.com.cn"]
    start_urls = [
    ]
     # 自定義配置
    custom_settings = {
         "ITEM_PIPELINES": {
         "mininova.pipelines.CarPipeline": 300,
         }
    }
    def start_requests(self): #重新定義起始爬取點(diǎn)
        #所有首字母
        words = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]
        #按照首字母,組合對(duì)應(yīng)的頁(yè)面,壓入start_urls
        for word in words:
            self.start_urls.append("https://www.autohome.com.cn/grade/carhtml/"+word+".html") 
        #根據(jù)start_urls,抓取頁(yè)面
        for url in self.start_urls:
            yield Request(url,meta={"word":word})
    #定義默認(rèn)的抓取函數(shù)
    def parse(self, response): 
        print("url")
        print(response.url)
        word = response.meta["word"]
        car_cates = response.xpath("http://dl").extract()
        brand_id = 0
        total_cars = []
        for brand_index in range(len(car_cates)):
            #品牌編號(hào)
            brand_num = brand_index + 1
            brand_num = str(brand_num)
            #品牌名
            brand = response.xpath("http://dl["+brand_num+"]/dt/div[1]/a/text()").extract()[0]
            print("brand:"+brand)
            #品牌logo
            brand_logo_url = response.xpath("http://dl["+brand_num+"]/dt//img[1]/@src").extract()[0]
            #品牌小類別
            brand_items = response.xpath("http://dl["+brand_num+"]/dd//div[@class="h3-tit"]/a/text()").extract()
            #品牌小類別對(duì)應(yīng)的頁(yè)面
            brand_item_urls = response.xpath("http://dl["+brand_num+"]/dd//div[@class="h3-tit"]/a/@href").extract()
            for brand_item_index in range(len(brand_items)):
                #品牌小類別的編號(hào)
                brand_item_num = brand_item_index + 1
                brand_item_num = str(brand_item_num)
                #品牌小類別名
                brand_item = brand_items[brand_item_index]
                #品牌小類別對(duì)應(yīng)的頁(yè)面的url
                brand_item_url = brand_item_urls[brand_item_index]
                print("brand_item:"+brand_item)
                print("brand_item_url:"+brand_item_url)
                #品牌小類別中的所有車
                cars = response.xpath("http://dl["+brand_num+"]/dd//ul[@class="rank-list-ul"]["+brand_item_num+"]/li[@id]").extract()
                print("cars_count:"+str(len(cars)))
                for car_index in range(len(cars)):
                    car_num = car_index + 1
                    car_num = str(car_num)
                    #具體車的名稱
                    name = response.xpath("http://dl["+brand_num+"]/dd//ul[@class="rank-list-ul"]["+brand_item_num+"]/li[@id]["+car_num+"]/h4/a/text()").extract()[0]
                    #車對(duì)應(yīng)的頁(yè)面
                    url = response.xpath("http://dl["+brand_num+"]/dd//ul[@class="rank-list-ul"]["+brand_item_num+"]/li[@id]["+car_num+"]/h4/a/@href").extract()[0]
                    #報(bào)價(jià)(最低價(jià)-最高價(jià))
                    price = response.xpath("http://dl["+brand_num+"]/dd//ul[@class="rank-list-ul"]["+brand_item_num+"]/li[@id]["+car_num+"]/div[1]/a/text()").extract()[0]
                    prices = price.split("-")
                    price_base = "萬(wàn)"
                    if len(prices) != 2:
                        max_price = "暫無(wú)"
                        min_price = "暫無(wú)"
                    else:
                        max_price = str(prices[1].replace(price_base,""))
                        min_price = str(prices[0])
                    print("car:"+name+" max_price:"+str(max_price)+" min_price:"+str(min_price)+" price_base:"+price_base)
                    car_item = carItem()
                    car_item["name"] = name
                    car_item["url"] = url
                    car_item["brand_item"] = brand_item
                    car_item["first_word"] = word
                    car_item["brand"] = brand
                    car_item["brand_logo_url"] = brand_logo_url
                    car_item["max_price"] = max_price
                    car_item["min_price"] = min_price
                    total_cars.append(car_item)
        return total_cars

item

# -*- coding: utf-8 -*-
import scrapy
class carItem(scrapy.Item):
    #具體車名
    name = scrapy.Field()
    #對(duì)應(yīng)的介紹頁(yè)面url
    url = scrapy.Field()
    #最高報(bào)價(jià),單位(萬(wàn))
    max_price = scrapy.Field()
    #最低報(bào)價(jià),單位(萬(wàn))
    min_price = scrapy.Field()
    #品牌名
    brand = scrapy.Field()
    #品牌logo
    brand_logo_url = scrapy.Field()
    #品牌小類別名
    brand_item = scrapy.Field()
    #品牌首字母
    first_word = scrapy.Field() 

mongo_car

from mininova.mongodb import Mongo
from mininova.settings import mongo_setting
class MongoCar():
    db_name = "car"
    brand_set_name = "brand"
    brand_item_set_name = "brand_item"
    car_set_name = "car"
    def __init__(self):
        self.db = Mongo(mongo_setting["mongo_host"],mongo_setting["mongo_port"],mongo_setting["mongo_user"],mongo_setting["mongo_password"])

    def insert(self,item):
        brand_where = {"name":item["brand"]}
        brand = self.brand_exist(self.db,brand_where)
        if brand == False:
            brand = {"name":item["brand"],"first_word":item["first_word"]}
            brand = self.insert_brand(self.db,brand)
            print("brand insert ok!")
        else:
            brand = {"name":item["brand"],"first_word":item["first_word"],"logo_url":item["brand_logo_url"]}
            brand = self.update_brand(self.db,brand_where,brand)
            print("brand_exist!")

        brand_item_where = {"name":item["brand_item"]}
        brand_item = self.brand_item_exist(self.db,brand_item_where)
        if brand_item == False:
            brand_item = {"name":item["brand_item"],"first_word":item["first_word"],"brand_id":brand["_id"]}
            brand_item = self.insert_brand_item(self.db,brand_item)
            print("brand_item insert ok!")
        else:
            print("brand_item_exist!")

        car_where = {"name":item["brand_item"],"name":item["name"]}
        car = self.car_exist(self.db,car_where)
        if car == False:
            car = {"name":item["name"],"url":item["url"],"max_price":item["max_price"],"min_price":item["min_price"],"first_word":item["first_word"],"brand_id":brand["_id"],"brand_item_id":brand_item["_id"]}
            car = self.insert_car(self.db,car)
            print("car insert ok!")
        else:
            print("car_exist!")
            


        if car != False:
            return True;
        else:
            return False;
    def update_brand(self,db,brand_where,brand):
        my_set = db.set(self.db_name,self.brand_set_name)
        my_set.update_one(brand_where,{"$set":brand})
        exist = my_set.find_one(brand_where)
        if(exist is None):
            return False
        else:
            return exist

    def brand_exist(self,db,brand):
        my_set = db.set(self.db_name,self.brand_set_name)
        exist = my_set.find_one(brand)
        if(exist is None):
            return False
        else:
            return exist

    def insert_brand(self,db,brand):
        my_set = db.set(self.db_name,self.brand_set_name)
        my_set.insert_one(brand)
        brand = my_set.find_one(brand)
        return brand

    def brand_item_exist(self,db,brand_item):
        my_set = db.set(self.db_name,self.brand_item_set_name)
        exist = my_set.find_one(brand_item)
        if(exist is None):
            return False
        else:
            return exist

    def insert_brand_item(self,db,brand_item):
        my_set = db.set(self.db_name,self.brand_item_set_name)
        my_set.insert_one(brand_item)
        brand = my_set.find_one(brand_item)
        return brand

    def car_exist(self,db,car):
        my_set = db.set(self.db_name,self.car_set_name)
        exist = my_set.find_one(car)
        if(exist is None):
            return False
        else:
            return exist

    def insert_car(self,db,car):
        my_set = db.set(self.db_name,self.car_set_name)
        my_set.insert_one(car)
        brand = my_set.find_one(car)
        return brand

pipeline

from mininova.settings import settings
import pymysql
import os
from mininova.db import Bookdb
from mininova.mongo_novel import MongoNovel
from mininova.mongo_car import MongoCar
import copy
class CarPipeline(object):   
    def process_item(self,item,spider):
        mongo_car = MongoCar()
        mongo_car.insert(item)
        print(item["name"])
        print("item insert ok!")

setting

mongo_setting = {
    "mongo_host" : "xxx.xxx.xxx.xxx",
    "mongo_port" : 27017,
    "mongo_user" : "username",
    "mongo_password" : "password"
}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/43814.html

相關(guān)文章

  • 首次公開,整理12年積累博客收藏夾,零距離展示《收藏夾吃灰》系列博客

    摘要:時(shí)間永遠(yuǎn)都過(guò)得那么快,一晃從年注冊(cè),到現(xiàn)在已經(jīng)過(guò)去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時(shí)候把他們整理一下了。那是因?yàn)槭詹貖A太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...

    Harriet666 評(píng)論0 收藏0
  • 2016年,我對(duì)爬蟲總結(jié)

    摘要:都說(shuō)年末了,該給自己寫寫總結(jié)了。我現(xiàn)在做一些簡(jiǎn)單的爬蟲都會(huì)用它。并且對(duì)數(shù)據(jù)的實(shí)時(shí)性要求較高,或者爬數(shù)據(jù)的時(shí)候封的太厲害了。對(duì)于這一類的爬蟲。消息隊(duì)列用于分發(fā)消息給某個(gè)爬蟲節(jié)點(diǎn)。爬蟲節(jié)點(diǎn)完成具體的爬蟲,格式化爬蟲數(shù)據(jù)。最后,感謝我的,謝謝 都說(shuō)年末了,該給自己寫寫總結(jié)了。今天我想談一談的是我在公司這一年多里的負(fù)責(zé)的部分工作---爬蟲。做了這么久的爬蟲,是該寫點(diǎn)什么,留下點(diǎn)什么。在我所負(fù)責(zé)...

    netmou 評(píng)論0 收藏0
  • Golang爬蟲 爬取汽車之家 二手車產(chǎn)品庫(kù)

    摘要:原文地址爬取汽車之家二手車產(chǎn)品庫(kù)項(xiàng)目地址目標(biāo)最近經(jīng)常有人在耳邊提起汽車之家,也好奇二手車在國(guó)內(nèi)的價(jià)格是怎么樣的,因此本次的目標(biāo)站點(diǎn)是汽車之家的二手車產(chǎn)品庫(kù)分析目標(biāo)源一頁(yè)共條含分頁(yè),但這個(gè)老產(chǎn)品庫(kù),在頁(yè)后會(huì)存在問(wèn)題,因此我們爬取頁(yè)可以獲取全 原文地址:爬取汽車之家 二手車產(chǎn)品庫(kù)項(xiàng)目地址:https://github.com/go-crawler... 目標(biāo) 最近經(jīng)常有人在耳邊提起汽車之家...

    sumory 評(píng)論0 收藏0
  • 爬蟲學(xué)習(xí)之基于Scrapy網(wǎng)絡(luò)爬蟲

    摘要:不過(guò)不用擔(dān)心,中有很多非常優(yōu)秀的爬蟲框架,比如我們接下來(lái)要學(xué)習(xí)到的。結(jié)合以上分析我們基本確定了本次爬蟲的各個(gè)路線入口,接下來(lái)我們就開始通過(guò)程序來(lái)實(shí)現(xiàn)本次的目標(biāo)。這里我們的目的是建立一種寫爬蟲的思路,而不在于怎么使用工具來(lái)爬數(shù)據(jù)。 概述 在上一篇文章《爬蟲學(xué)習(xí)之一個(gè)簡(jiǎn)單的網(wǎng)絡(luò)爬蟲》中我們對(duì)爬蟲的概念有了一個(gè)初步的認(rèn)識(shí),并且通過(guò)Python的一些第三方庫(kù)很方便的提取了我們想要的內(nèi)容,但是...

    BingqiChen 評(píng)論0 收藏0
  • 大話爬蟲實(shí)踐技巧

    摘要:圖意淫爬蟲與反爬蟲間的對(duì)決數(shù)據(jù)的重要性如今已然是大數(shù)據(jù)時(shí)代,數(shù)據(jù)正在驅(qū)動(dòng)著業(yè)務(wù)開發(fā),驅(qū)動(dòng)著運(yùn)營(yíng)手段,有了數(shù)據(jù)的支撐可以對(duì)用戶進(jìn)行用戶畫像,個(gè)性化定制,數(shù)據(jù)可以指明方案設(shè)計(jì)和決策優(yōu)化方向,所以互聯(lián)網(wǎng)產(chǎn)品的開發(fā)都是離不開對(duì)數(shù)據(jù)的收集和分析,數(shù) showImg(https://segmentfault.com/img/remote/1460000013428119?w=539&h=337)...

    沈儉 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<