python爬虫爬取汽车网站外型图片

我选择的起始网址:http://www.hao123.com/auto/brand

python爬虫爬取汽车网站外型图片_第1张图片

当你随便选择一个车牌的选框( 不要 同时选择多个选框)你就会发现每个车牌对应一个网址 每个网址的区别就是数字不同

比如选中奥迪时对应的网址:https://car.58che.com/brand/1.html 也就是说按数字来就可以遍历所有的汽车了

我要爬取的是汽车网站的所有汽车的外观图片,所以下一步就是找汽车外观图片,先点击一辆汽车进入下一个页面

python爬虫爬取汽车网站外型图片_第2张图片

发现汽车外观图片在左下角的那个地方 点击进入里面的详细页面

这样汽车外观图片就找到了,下一步就是看看这些图片数据是怎么加载的,按f12查看一下本页面的一些数据信息

python爬虫爬取汽车网站外型图片_第3张图片

如果没有那个html页面再按f5刷新一下,发现这些图片都是通过js加载的,所有图片都是以json的数据格式存储在imgList这个变量中,然后图片的地址在里面的imgSrc这个属性中。

到这里基本就弄清楚了,理一下思路,人工的话就是点击一个选框选中一个牌子,再在下面的不同型号中选中一个进入下一个页面,然后再在这个页面找到外观图片的入口,最后就进入外观图片的页面了,这些外观图片都在一个滚动列表里,然后把他们一个一个下载下来,然后用代码实现这个过程。

除了下载所需要的包外,还要下载phantomjs(下载后记住下载地址,代码里要用到,我存放的地址是D:/phantomjs-2.1.1-windows/bin/phantomjs) 环境是python3 编译器pycharm

import requests
from bs4 import BeautifulSoup
from selenium import webdriver
import json
import os
import urllib.request

# 下载图片函数
def download_img(url,name1,name2):
    # 获取url最后面的字符串作为图片的名称,先以/分割,再取最后一部分
    splist_list = url.split('/')
    filename = splist_list.pop()
    # 存储图片的地址
    path = 'D:/cars'+'/'+name1+'/'+name2
    # 如果路径文件夹不存在就自行创建
    if not os.path.exists(path):
        os.makedirs(path)
    # 拼接全路径
    file_path = os.path.join(path, filename)
    # 下载图片
    urllib.request.urlretrieve(url,filename=file_path)

def parse_page(url):
    # 获取这个页面的车辆品牌,并把它的品牌名字存放在name1
    response = requests.get(url)
    soup = BeautifulSoup(response.content,'lxml')
    choose_name = soup.find('div',class_='r select_sub1 select_re p')
    name = choose_name.find_all('a')[0]
    name1 = name.get_text()
    uls = soup.find('ul',class_='s_list clearfix')
    li = uls.find_all('li')
    # 遍历这个品牌下所有不同型号的车辆,并获取他们所链接的下一个网址
    for x in li :
        name = x.find_all('a')[1]
        name2 = name.get_text()
        print(name2)
        a = x.find_all('a')[0]
        # url2就是这个型号下链接的网址
        url2 = 'https:'+a['href']
        response2 = requests.get(url2)
        soup2 = BeautifulSoup(response2.content,'lxml')
        div = soup2.find('div',class_='smallimg')
        a2 = div.find_all('a')[0]
        # url3就是外观图片的网址
        url3 = 'https:'+ a2['href']
        response3=requests.get(url3)
        soup3 =BeautifulSoup(response3.content,'lxml')
        # 图片存放在js代码里的一个变量里,这里就是获得这个变量里面的值
        script = soup3.find_all('script')[9]
        driver = webdriver.PhantomJS(executable_path='D:/phantomjs-2.1.1-windows/bin/phantomjs')
        driver.get(url3)
        r = driver.execute_script("return imgList")
        jd = json.loads(r)
        # 获取到的值是json数据格式,解析json数据并获取图片的地址
        for each in jd :
            imgSrc = 'https:'+each['imgSrc']
            productName = each['productName']
            # 下载图片
            download_img(imgSrc,name1,name2)
        print('-'*100)
def main():
        # 初始网址,网址规律b1,b2,b3......
        url = 'https://car.58che.com/series/b1_s5.html'
        parse_page(url)


if __name__ == '__main__':
        main()

运行结果

python爬虫爬取汽车网站外型图片_第4张图片

python爬虫爬取汽车网站外型图片_第5张图片

你可能感兴趣的:(python)