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

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

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

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

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

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

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

如果没有那个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()

运行结果

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

猿憨憨

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

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

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

打赏作者

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

抵扣说明:

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

余额充值