日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python爬虫爬汽车图片_Python快速爬取车标网图片,以后不要说这什么车你不认识了!...

發(fā)布時(shí)間:2023/12/10 python 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python爬虫爬汽车图片_Python快速爬取车标网图片,以后不要说这什么车你不认识了!... 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

知識(shí)不分邊界......

人,為什么要讀書(shū)?舉個(gè)例子:

當(dāng)看到天邊飛鳥(niǎo),你會(huì)說(shuō):“落霞與孤鶩齊飛,秋水共長(zhǎng)天一色。”而不是:“臥靠,好多鳥(niǎo)。”;

當(dāng)你失戀時(shí)你低吟淺唱道:“人生若只如初見(jiàn),何事秋風(fēng)悲畫(huà)扇。”而不是千萬(wàn)遍地悲喊:“藍(lán)瘦,香菇!”

今天回家早,陪倆小爺在樓下遛彎,忽然聽(tīng)見(jiàn)一陣馬達(dá)轟鳴聲,嗖~~閃一輛跑車(chē),大大問(wèn);“爸爸,這是什么車(chē)啊?” 我:“紅色的車(chē)…”小小說(shuō):“爸爸肯定不認(rèn)識(shí),我也知道是紅色的車(chē)。”氣氛有些冷場(chǎng)…

別人看車(chē)關(guān)注牌子,我看車(chē)關(guān)注寬敞不,睡著舒服不?可不管怎樣不能在孩子面前丟份啊,我決定學(xué)習(xí)學(xué)習(xí)車(chē)標(biāo)!

車(chē)標(biāo)網(wǎng)

網(wǎng)站將車(chē)系按照字母從A-Z進(jìn)行了排序,然后點(diǎn)擊每個(gè)車(chē)標(biāo)進(jìn)入詳細(xì)信息,那Audi做例子:

有用的數(shù)據(jù)是哪些?品牌名稱(chēng),車(chē)標(biāo),成立時(shí)間,主要車(chē)型,官網(wǎng)…

那么今天的爬蟲(chóng)練習(xí)呼之欲出,獲取車(chē)標(biāo)網(wǎng)下所有的汽車(chē)品牌及車(chē)標(biāo),并入庫(kù)保存…

數(shù)據(jù)庫(kù)操作指南

針對(duì)簡(jiǎn)單的數(shù)據(jù),我習(xí)慣用python自帶的sqlite3進(jìn)行數(shù)據(jù)庫(kù)的存儲(chǔ),簡(jiǎn)單方便….那么如何管理我們的數(shù)據(jù)庫(kù)呢?推薦使用DBUtils!在往期的文章

決戰(zhàn)高考,幫你秒變成語(yǔ)之王中,有對(duì)DBUtils的詳細(xì)介紹,這里就不再贅述了…

但本次有一個(gè)知識(shí)點(diǎn),我們需要將車(chē)標(biāo)圖片,存儲(chǔ)在數(shù)據(jù)庫(kù)中,那么如何在數(shù)據(jù)庫(kù)中存儲(chǔ)圖片,使用類(lèi)型BLOB。舉一個(gè)簡(jiǎn)單的數(shù)據(jù)庫(kù)圖片讀寫(xiě)例子

# -*- coding: utf-8 -*-

# @Author : 王翔

# @JianShu : 清風(fēng)Python

# @Date : 2019/7/22 23:00

# @Software : PyCharm

# @version :Python 3.7.3

# @File : show.py

import sqlite3

db = sqlite3.connect('Car.db')

cur = db.cursor()

cur.execute("CREATE TABLE if not exists image_save (image BLOB);")

with open('Audi.jpg', 'rb') as f:

cur.execute("insert into image_save values(?)", (sqlite3.Binary(f.read()),))

db.commit()

cur.execute('select image from image_save limit 1')

b = cur.fetchone()[0]

with open('1.jpg', 'wb') as f:

f.write(b)

我們創(chuàng)建一個(gè)image_save的測(cè)試表,然后將圖片讀取為二進(jìn)制字節(jié)的方式,通過(guò)sqlite3.Binary將二進(jìn)制文件存儲(chǔ)至數(shù)據(jù)庫(kù)。

那么同樣的,我們將BLOB類(lèi)型的圖片讀取出來(lái)后,進(jìn)行寫(xiě)入,即可達(dá)到效果,來(lái)看看這個(gè)1.jpg是否正常:

圖片下載小技巧

看過(guò)了二進(jìn)制的存儲(chǔ)方式,大家肯定說(shuō)明白了,網(wǎng)站獲取到圖片鏈接然后找著上面的例子下載到本地,然后再進(jìn)行二進(jìn)制的讀取后存儲(chǔ)數(shù)據(jù)庫(kù)即可,對(duì)嗎?不對(duì)…有什么問(wèn)題呢?來(lái)看一個(gè)例子:

這里Audi圖片的鏈接地址,我們通過(guò)requests來(lái)下載看看….

import requests

r =requests.get('http://img.chebiaow.com/thumb/cb/allimg/1303/1-1303061Z600520,c_fill,h_138,w_160.jpg')

r.content

b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01...'

可以看到我們通過(guò)requests.get獲取到的content就已經(jīng)是二進(jìn)制數(shù)據(jù)了,為何還要存儲(chǔ)成圖片,在轉(zhuǎn)化呢?網(wǎng)頁(yè)分析

適配url

針對(duì)A-Z的車(chē)標(biāo)排序,網(wǎng)站的url匹配關(guān)系很簡(jiǎn)單:

from string import ascii_uppercase as au

# ascii_uppercase代表A-Z,當(dāng)然你可以不引入模塊自己生成也OK...

for uppercase in au:

"http://www.chebiaow.com/logo/{}.html".format(au)

獲取品牌鏈接

可以看到在包含cb-list方法的ul下匹配所有l(wèi)i中的第一個(gè)a標(biāo)簽,然后拼接base_url即可。

品牌詳情

進(jìn)入品牌詳情界面后,我們針對(duì)左右欄目的設(shè)置,分別獲取所需標(biāo)紅的內(nèi)容

整體代碼

通過(guò)上面的分析,我們開(kāi)始爬蟲(chóng),但這個(gè)網(wǎng)站真的是相應(yīng)好慢,沒(méi)辦法添加上Threading的多線(xiàn)程執(zhí)行吧,整體代碼如下:

# -*- coding: utf-8 -*-

# @Author : 王翔

# @JianShu : 清風(fēng)Python

# @Date : 2019/7/22 23:08

# @Software : PyCharm

# @version :Python 3.7.3

# @File : CarLogo.py

import os

from db_maker import DbMaker as DB

from string import ascii_uppercase as au

import requests

from bs4 import BeautifulSoup

from urllib.parse import urljoin

from sqlite3 import Binary

import threading

import time

class CarLogo:

DATABASE = 'car.db'

def __init__(self):

self.db = DB()

self.path = os.path.dirname(os.path.realpath(__file__))

self.images_path = os.path.join(self.path, 'images_path')

self.host = "http://www.chebiaow.com"

self.headers = {

'Connection': 'keep-alive',

'user-agent': ('Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 '

'(KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36')

}

def check_dir(self):

if not os.path.exists(self.images_path):

os.mkdir(self.images_path)

def get_response(self, url, params=None):

try:

r = requests.get(url, headers=self.headers, params=params, timeout=15)

except:

pass

soup = BeautifulSoup(r.text, "lxml")

return soup

def create_url(self):

_url_format = "http://www.chebiaow.com/logo/{}.html"

for uppercase in au:

try:

soup = self.get_response(_url_format.format(uppercase))

_cars = soup.find("ul", {"class": "cb-list"}).findAll('li')

for car in _cars:

# self.car_info()

t = threading.Thread(target=self.car_info, args=(urljoin(self.host, car.div.a['href']),))

time.sleep(0.5)

t.start()

except:

pass

def car_info(self, url):

soup = self.get_response(url)

left_index = soup.find("div", {"class": "xq-left"}).findAll('p')

name = left_index[0].text

image_byte = requests.get(left_index[1].img['src']).content

right_index = soup.find("ul", {"class": "xq-right"}).findAll('li')

founded = right_index[3].span.text

models = right_index[5].span.text

website = right_index[7].span.text

print("Insert Car Logo {}".format(name))

_sql = "insert into car_logo(name,image,founded,models,website) values (?,?,?,?,?)"

self.db.insert(_sql, (name, Binary(image_byte), founded, models, website))

if __name__ == '__main__':

m = CarLogo()

m.create_url()

最終存儲(chǔ)的數(shù)據(jù)庫(kù)如下:

由于圖片是BLOB類(lèi)型的二進(jìn)制文件,所以大家看到的是星星,感覺(jué)網(wǎng)站的車(chē)標(biāo)是不不夠,怎么才140多種(雖然我能認(rèn)識(shí)的不到20種…)

這個(gè)中興看了半天還以為是搞錯(cuò)了,沒(méi)想到是同名的…

OK,今天的內(nèi)容就到這里,整理好數(shù)據(jù)庫(kù),哪天閑了做一個(gè)車(chē)標(biāo)的測(cè)試題,當(dāng)然大家可以按照之前我的使用爬蟲(chóng)+Flask獲取世界國(guó)旗數(shù)據(jù)和孩子一起學(xué)習(xí)那邊文章引申著自己寫(xiě)一個(gè)車(chē)標(biāo)的練習(xí)題。

總結(jié)

以上是生活随笔為你收集整理的python爬虫爬汽车图片_Python快速爬取车标网图片,以后不要说这什么车你不认识了!...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。