使用scrapy框架爬取汽车之家的图片(高清)

不同于上一篇的地方是,这篇要爬取的是高清图片,而不仅仅是缩略图。
先来看一下要爬取的页面:https://car.autohome.com.cn/pic/series/3464.html


上一篇只是爬取了这些缩略图,而且每个子标签下还有很多图片都没有得到,所以这篇的目的是分别进入到这些子标签的详情页进行高清图片的爬取。

准备工作

网站格式

先观察一下目标网站的格式:
起始页是:
https://car.autohome.com.cn/pic/series/3464.html
对"更多"选项进行检查:https://car.autohome.com.cn/pic/series/3464-10.html#pvareaid=2042222
#后的可以删去,即
https://car.autohome.com.cn/pic/series/3464-10.html
再对其它标签的"更多"进行检查:
https://car.autohome.com.cn/pic/series/3464-3.html
不仅如此,在每个标签的详情页里有可能存在更多的页,如车厢座椅的详情页就有很多页,以第二页举例,其url为:
https://car.autohome.com.cn/pic/series/3464-3-p2.html

  • 发现格式是很相似的,因此可以考虑用CrawlSpider

settings 设置

ITEM_PIPELINES = {# 'bmw.pipelines.BmwPipeline': 300,#  'scrapy.pipelines.images.ImagesPipeline':1'bmw.pipelines.BMWImagesPipeline': 1由于要使用框架下载并且做目录分类,因此不能再用默认的和ImagesPipeline了
}
# 图片下载路径,images pipelines使用
IMAGES_STORE = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'images')
请求头
DEFAULT_REQUEST_HEADERS = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8','Accept-Language': 'en','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, ''like Gecko) Chrome/81.0.4044.138 Safari/537.36'
}
ROBOTSTXT_OBEY = False

程序

程序整体构成如下:

bmw5.py

from bmw.items import BmwItem
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor"""
高清图的地址:https://car2.autoimg.cn/cardfs/product/g29/M04/71/D7/autohomecar__ChsEn10CSUmAHmqsAAm2XOgbAEI053.jpg
缩略图的地址:https://car2.autoimg.cn/cardfs/product/g29/M04/71/D7/240x180_0_q95_c42_autohomecar__ChsEn10CSUmAHmqsAAm2XOgbAEI053.jpg
注意到这两种图片的格式只有240x180_0_q95_c42_是不同的,因此可作为区分
"""class Bmw5Spider(CrawlSpider):name = 'bmw5'allowed_domains = ['car.autohome.com.cn']start_urls = ['https://car.autohome.com.cn/pic/series/3464.html']# 使用crawl spider 就不能重写parse方法rules = (Rule(LinkExtractor(allow=r'https://car.autohome.com.cn/pic/series/3464.+'), follow=True,callback='parse_page'),)def parse_page(self, response):category = response.xpath('//div[@class="uibox"]/div/text()').get()# 注意,所有图片都在uibox-con carpic-list03 border-b-solid这个div里,这是多个类的名字,因此要使用contains# 而且这里得到的urls是缩略图,因此要做上面注释部分的转换srcs = response.xpath('//div[contains(@class, "uibox-con")]/ul/li//img/@src').getall()srcs = list(map(lambda x: x.replace("240x180_0_q95_c42_", ""), srcs))srcs = ["https:" + url for url in srcs]yield BmwItem(category=category, image_urls=srcs)

pipelines.py

import os
from urllib import request
from scrapy.pipelines.images import ImagesPipeline
from bmw import settingsclass BmwPipeline:def __init__(self):# 使用如下代码可以查看文件当前所在目录,对于pipelines来说,是bmw,但它上面还有一个bmw,因此使用两次如下代码# os.path.dirname(__file__)# 再使用join拼接路径,即在最上面的bmw目录下创建了images文件夹self.path = os.path.join(os.path.dirname(os.path.dirname(__file__)),'images')if not os.path.exists(self.path):os.mkdir(self.path)def process_item(self, item, spider):# item的类型:<class 'bmw.items.BmwItem'>category = item['category']urls = item['urls']category_path = os.path.join(self.path, category)if not os.path.exists(category_path):os.mkdir(category_path)for url in urls:request.urlretrieve(url, os.path.join(category_path, url.split('_')[-1]))return itemclass BMWImagesPipeline(ImagesPipeline):def get_media_requests(self, item, info):request_objs = super(BMWImagesPipeline, self).get_media_requests(item, info)for request_obj in request_objs:request_obj.item = itemreturn request_objsdef file_path(self, request, response=None, info=None):path = super(BMWImagesPipeline, self).file_path(request, response=None, info=None)category = request.item.get('category')images_store = settings.IMAGES_STOREcategory_path = os.path.join(images_store, category)if not os.path.exists(category_path):os.mkdir(category_path)image_name = path.replace("full/", "")image_path = os.path.join(category_path, image_name)return image_path

item.py

import scrapyclass BmwItem(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()category = scrapy.Field()image_urls = scrapy.Field()images = scrapy.Field()

遇见的问题

  • 在运行时遇见了如下问题:
XX Spider.parse callback is not defined

查阅后才发现是因为使用了CrawlSpider但却没有继承,而是依然使用的scrapy.Spider.

使用scrapy框架爬取汽车之家的图片(高清)相关推荐

  1. python爬虫利用Scrapy框架爬取汽车之家奔驰图片--实战

    先看一下利用scrapy框架爬取汽车之家奔驰A级的效果图 1)进入cmd命令模式下,进入想要存取爬虫代码的文件,我这里是进入e盘下的python_spider文件夹内 C:\Users\15538&g ...

  2. 利用Scrapy框架爬取汽车之家图片(详细)

    爬取结果 爬取步骤 创建爬虫文件 进入cmd命令模式下,进入想要存取爬虫代码的文件,我这里是进入e盘下的E:\pystudy\scraping文件夹内 C:\Users\wei>E:E:\> ...

  3. scrapy爬虫之爬取汽车之家奥迪Q7高清图片

    文章目录 前言 一.项目准备 1.安装scrapy 2.创建scrapy项目 3.创建scrapy爬虫 4.创建结果 5.修改配置 二.项目实现 1.分析网页 2.创建Item 3.编写爬虫 4.更改 ...

  4. 爬取汽车之家图片 - scrapy - crawlspider - python爬虫案例

    爬取汽车之家图片 需求:爬取汽车之家某一个汽车的图片 ​ 一. 普通scrapy 第一步 页面分析 目标url: https://car.autohome.com.cn/photolist/serie ...

  5. python爬虫(二十四)爬取汽车之家某品牌图片

    爬取汽车之家某品牌图片 需求 爬取汽车之家某品牌的汽车图片 目标url https://car.autohome.com.cn/photolist/series/52880/6957393.html# ...

  6. python爬取汽车之家_python爬虫实战之爬取汽车之家网站上的图片

    随着生活水平的提高和快节奏生活的发展.汽车开始慢慢成为人们的必需品,浏览各种汽车网站便成为购买合适.喜欢车辆的前提.例如汽车之家网站中就有最新的报价和图片以及汽车的相关内容,是提供信息最快最全的中国汽 ...

  7. scrapy获取a标签的连接_python爬虫——基于scrapy框架爬取网易新闻内容

    python爬虫--基于scrapy框架爬取网易新闻内容 1.需求[前期准备] 2.分析及代码实现(1)获取五大板块详情页url(2)解析每个板块(3)解析每个模块里的标题中详情页信息 点击此处,获取 ...

  8. 利用python的scrapy框架爬取google搜索结果页面内容

    scrapy google search 实验目的 爬虫实习的项目1,利用python的scrapy框架爬取google搜索结果页面内容. https://github.com/1012598167/ ...

  9. 基于Scrapy框架爬取豆瓣《复联4》影评,并生成词云

    基于Scrapy框架爬取豆瓣<复联4>影评,并生成词云 1. 介绍及开发环境 2. 爬虫实现 2.1 新建项目 2.2 构造请求 2.3 提取信息 2.4 数据存储 2.4 运行结果 3. ...

最新文章

  1. labview实现简单的图片显示
  2. springboot整合springSecurity使用
  3. python3 发送邮件
  4. 豆果美食,把人们带回厨房
  5. zookeeper清空hbase_HBase在zookeeper下不创建目录
  6. Exchange 2010升级补丁时的服务状态变化
  7. 程序员面试金典——18.13 最大字母矩阵
  8. LOJ6504 「雅礼集训 2018 Day5」Convex 凸包、莫队
  9. Atitit 功能扩展法细则条例 目录 1. 界面ui扩展 2 1.1. 使用h5做界面 2 1.2. 自制h5 ide。。简化ui自定义配置 2 2. 业务逻辑扩展 2 2.1. Bpm流程引擎还
  10. Shopee平台有哪些电商大促活动?大促活动如何报名?
  11. linux运维经验总结
  12. 家里的电脑通过电信宽带设置成外网服务器
  13. Flink实操 : DataSource操作
  14. C# 10分钟入门基于WebOffice实现在线编辑文档,实时保存到服务器(所有office,兼容WPS)
  15. Hello Lyq And Xj
  16. 如何给孩子取个优雅的名字
  17. CSR8675学习笔记:从外部Flash读取bin文件
  18. mamp 下载安装php扩展,mamp安装php扩展
  19. 【考研plog】目标院校整理第二弹-复试分数线篇
  20. 间充质干细胞表面标志物了解一下

热门文章

  1. 数据库课程设计个人总结报告
  2. 网速4M等于多少KB/S,等于多少kbps
  3. BAD SLAM 解析
  4. 40万封机密邮件泄露,高管辞职
  5. 什么是ACID(转载)
  6. 【Word上标下标】Word上标下标的设置方法及其快捷键
  7. Python中级 —— 03进程与线程
  8. .for 与.fori区别
  9. 华中科技大学计算机组成原理实验,单总线CPU设计(变/定长指令周期3级时序)(HUST),logisim,educoder
  10. 32位和64位系统的区别及如何选择?