利用Scrapy框架爬取汽车之家图片(详细)
爬取结果
爬取步骤
创建爬虫文件
进入cmd命令模式下,进入想要存取爬虫代码的文件,我这里是进入e盘下的E:\pystudy\scraping文件夹内
C:\Users\wei>E:E:\>cd E:\pystudy\scrapingE:\pystudy\scraping>scrapy startproject Bmw5
New Scrapy project 'Bmw5', using template directory 'f:\anaconda3\lib\site-packages\scrapy\templates\project', created in:E:\pystudy\scraping\Bmw5You can start your first spider with:cd Bmw5scrapy genspider example example.comE:\pystudy\scraping>cd Bmw5E:\pystudy\scraping\Bmw5> scrapy genspider Bmw5_spider autohome.com
Created spider 'Bmw5_spider' using template 'basic' in module:Bmw5.spiders.Bmw5_spider
2)打开pycharm,导入文件,效果如下
3)创建start.py文件,为了更好的运行爬虫
from scrapy import cmdline
cmdline.execute("scrapy crawl Bmw5_spider".split())
#至此,start文件建立好
4)修改settings.py
ROBOTSTXT_OBEY = False
打开头文件并加入'User-Agent',修改如下
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/89.0.4389.90 Safari/537.36', }
取消注释 ITEM_PIPELINES
ITEM_PIPELINES = {'Bmw5.pipelines.Bmw5Pipeline': 300, }
主要程序
1 Bmw5Spider文件
import scrapy
from Bmw5.items import Bmw5Itemclass Bmw5SpiderSpider(scrapy.Spider):name = 'Bmw5_spider'allowed_domains = ['autohome.com']start_urls = ['https://car.autohome.com.cn/pic/series/65.html#pvareaid=2042194']# 其中start_urls需要我们修改,打开汽车之家官网,按品牌找车--> 宝马 --> 宝马--> 图片# 然后复制其地址,与原来的start_urls的参数替换即可def parse(self, response):uiboxs = response.xpath("//div[@class='uibox']")[1:]for uibox in uiboxs:title = uibox.xpath(".//div[@class='uibox-title']/a/text()").get()urls = uibox.xpath(".//ul/li/a/img/@src").getall()urls = list(map(lambda url: response.urljoin(url), urls))#print(urls)# # 后面这两行代码是需要编写完items.py后,才写的。item = Bmw5Item(title=title,urls=urls)yield item
2item文件
import scrapyclass Bmw5Item(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()title = scrapy.Field()urls = scrapy.Field()
3 pipelines.py处理数据
# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.htmlimport os
from urllib import request
# useful for handling different item types with a single interface
from itemadapter import ItemAdapterclass Bmw5Pipeline:def __init__(self):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):title = item['title']urls = item['urls']title_path = os.path.join(self.path, title)if not os.path.exists(title_path):os.mkdir(title_path)for url in urls:# 这行代码是给每一种图片以它的地址命名,你仔细分析每一张图的图片地址前面的都一样,所以以下划线分割,取到最后一位字符就是名字。image_name = url.split("_")[-1]# 利用request库的urlretrieve将图片下载到title_path绝对路径。request.urlretrieve(url, os.path.join(title_path, image_name))return item
————————————————
参考链接:https://blog.csdn.net/weixin_44730235/article/details/104431208
改进
为什么要选择使用scrapy内置的下载文件的方法:
1.避免重新下载最近已经下载过的文件。
2.可以方便的指定文件存储的路径。
3.可以将下载的图片转换成通用的搭式。比如png.4.可以方便的生成缩略图。
5.可以方便的检测图片的宽和高,确保他们满足最小限制。6.异步下载,效率非常高。
下载文件的Files Pipeline :
当使用Files Pipeline下就文件的时候,按照以下步骤来完成:
1.定义好一个 Item,然后在这个item中定义两个属性,分别为files _url以及files 。files _url是用来存储需要下戟的文件的url链接,需要给一个列表
2.当文件下载完成后,会把文件下簇的相关信息存储到 item的4fil1es 属性中。比如下载路径、下载的ur和文件的校验码等。3,在配置文件 settimgs.py中配器 FILES_STORE,这个配置是用来设置文件下航下来的路径。
4.启动pipelime :在ITEM_PIPELINES中设嚣 'scrapy.pipelines.files.FilesPipeline':1 。下载图片的Images Pipeline :
当使用images Pipeline下载文件的时候,按照以下步婆来完成:
1.定义好一个Item ,然后在这个 item中定义两个属性,分别为 image_url 以及images . image_url是用来存诸需要下载的阻片的url随接,需要给一个列表。
⒉.当配置下载完或后,会把文件下载的相关信息存储到 item的 images 属性中。比如下载路径、下载的url和图片的校验码等。3.在配置文件 settings.py中配置工IMAGES_STORE,这个配置是用来设置图片下载下来的路径。
4.启动 pipeline :在ITEM_PIPELINES中设置'scrapy.pipelines.images.ImagesPipeline': 1
按上面步骤修改后代码如下
导入OS
下载结果如图
若实现下载分类设置,期初实现的功能:
重写Pipeline方法,设置下载路径
class Bmw5ImangePipeline(ImagesPipeline):
from scrapy.pipelines.images import ImagesPipelinefrom Bmw5 import settings
class Bmw5ImangePipeline( ImagesPipeline ):def get_media_requests(self, item, info):request_objs = super(Bmw5ImangePipeline, self).get_media_requests(item, info)for request_obj in request_objs:request_obj.item=itemreturn request_objs#发送下载请求def file_path(self, request, response=None, info=None, *, item=None):path = super(Bmw5ImangePipeline,self).file_path(request, response,info)title=request.item.get("title")images_store =settings.IMAGES_STOREcategory_path = os.path.join(images_store, title)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
修改设置文件下载
很快就下载完了
利用Scrapy框架爬取汽车之家图片(详细)相关推荐
- python爬虫利用Scrapy框架爬取汽车之家奔驰图片--实战
先看一下利用scrapy框架爬取汽车之家奔驰A级的效果图 1)进入cmd命令模式下,进入想要存取爬虫代码的文件,我这里是进入e盘下的python_spider文件夹内 C:\Users\15538&g ...
- 使用scrapy框架爬取汽车之家的图片(高清)
使用scrapy框架爬取汽车之家的图片(高清) 不同于上一篇的地方是,这篇要爬取的是高清图片,而不仅仅是缩略图. 先来看一下要爬取的页面:https://car.autohome.com.cn/pic ...
- 利用Scrapy框架爬取LOL皮肤站高清壁纸
利用Scrapy框架爬取LOL皮肤站高清壁纸 Lan 2020-03-06 21:22 81 人阅读 0 条评论 成品打包:点击进入 代码: 爬虫文件 # -*- coding: utf- ...
- 爬取汽车之家图片 - scrapy - crawlspider - python爬虫案例
爬取汽车之家图片 需求:爬取汽车之家某一个汽车的图片 一. 普通scrapy 第一步 页面分析 目标url: https://car.autohome.com.cn/photolist/serie ...
- 利用Scrapy框架爬取前途无忧招聘信息
利用Scrapy框架爬取前途无忧招聘信息 关于安装和命令使用可参考:https://docs.scrapy.org/en/1.7/intro/install.html 先创建项目和爬虫文件 分析网站 ...
- python笔记之利用scrapy框架爬取糗事百科首页段子
环境准备: scrapy框架(可以安装anaconda一个python的发行版本,有很多库) cmd命令窗口 教程: 创建爬虫项目 scrapy startproject qq #创建了一个爬虫项目q ...
- 利用scrapy框架爬取动态加载的数据
在爬取有些网站的是后,数据不一定全部是可视化界面的,当我们拖动滚动条时才会加载其他的数据,如果我们也想爬取这部分数据,就需要使用selenium模块,在scrapy里可以结合该模块修改返回对象 一.编 ...
- 利用Scrapy框架爬取落网上的音乐文件
今天爬取的是本人特别喜欢的一个音乐网站,www.luoo.net, 首先是设置item中需要保存的字段. items.py 字段名称包括期刊号,期刊名,期刊创建时间,单期期刊下的音乐名,作者名,音乐文 ...
- 利用scrapy框架爬取网易新闻排行榜
wyxw.py中代码 # -*- coding: utf-8 -*- import scrapy from ..items import WyxwItemclass WyxwSpider(scrapy ...
最新文章
- Pytorch自定义Loss
- 对DataSet,DataRow,DateTable转换成相应的模型
- 编译过程中的链接地址对最终编译镜像文件的影响
- JavaScript Break 和 Continue 语句
- paip.php eclipse output echo 乱码
- 《微观经济学》第三章相互依存性与贸易的好处
- 【计算机视觉】人脸识别--人脸识别技术综述
- 动态ip如何做域名解析
- SpringBoot进阶-寻找附近的人,Redis实现交友APP(七)
- 个人见解:什么是WBS?
- Springboot毕设项目图书馆座位预定系统plo6rjava+VUE+Mybatis+Maven+Mysql+sprnig)
- CRM系统有哪些效果?
- 首都师范 博弈论 2 1 1占优策略与占优策略均衡
- Android开发中Post方式上传文件(头像之类的)
- 基本算法的设计与实现-史莱姆通话
- 北大本科生凭芯片研究获全球竞赛第一!一作发表8篇EDA领域顶会论文,“致力探索卡脖子难题”
- h5物体拖动_HTML5原生拖拽/拖放(drag drop)详解
- 网络协议实验四 ARP 协议分析实验
- 手机控制云服务器文件,手机控制云服务器文件
- Win10便签设置日历的一周第一天为周日的方法