scrapy初学:爬百度图片
爬虫初学:基于Pycharm用scrapy爬取百度图片
- 初学爬虫
- 选择工具
- 功能说明
- 具体内容和代码
- 踩过的坑
初学爬虫
本人最近初学爬虫的相关知识和实现,这里简单介绍一下对如何用scrapy进行百度图片的抓取,记录一下自己踩过的坑。
选择工具
- Pycharm 2020.1
- Scrapy
- python 3.8
功能说明
制作百度图片的scrapy爬虫,能够根据关键字下载百度图片并标明序号和进行存储。
具体内容和代码
由于scrapy工具有出色的表现和良好的口碑,因此一直想学习用scrapy来爬取数据。
- 在Pycharm中安装scrapy,运用Pycharm安装库方法即可,打开Pycharm后,点击File->Setting->Project
Interpreter后,选择弹出对话框的+,从选择包中选择scrapy安装即可。!
在这里插入图片描述
其中踩过的坑在后续章节中会写明。
安装完scrapy, 即可在Pycharm终端处通过命令
scrapy startproject projectname
建立爬虫项目,生成pipeline, setting等相关文件。这里我写的项目名称是BaiduScrapy。在./BaiduScrapy/Spiders文件夹下的新建爬虫的python文件:BaiduPicSpider.py,作为爬虫的类。
生成的项目目录如下图:

3.
后续修改以下程序实现目标工程:
Settings.py处增加:
ROBOTSTXT_OBEY = FalseMAX_PAGE = 30IMAGES_STORE = './images'ITEM_PIPELINES = {'BaiduScrapy.pipelines.BaiduImagePipeline': 300,
}
BaiduPicScrapy.py的代码为:
# -*- coding: utf-8 -*-# Define here the models for image scrapefrom scrapy import Spider, Request
from urllib.parse import quote
from BaiduScrapy.items import BaiduImageItem
import jsonclass ImageSpider(Spider):name = 'image'allowed_domain = ['images.baidu.com']start_url = ['https://image.baidu.com/']url_info = {'url_seq': 1}def parse(self, response):images = json.loads(response.body)['data']for image in images:item = BaiduImageItem()try:item['url'] = image.get('thumbURL')item['url_seq'] = self.url_info['url_seq']item['url_name'] = self.url_info['url_name']self.url_info['url_seq'] = self.url_info['url_seq'] + 1print("%s:%s\n" % ("parse", item['url']))yield itemexcept Exception as e:print(e)passdef start_requests(self):data = {'queryWord':'战斗机','word': '战斗机'} ####此处可以根据要求修改关键词base_url = 'https://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&is=&fp=result&queryWord='if data['queryWord'] == '战斗机': ####此处可以根据要求修改关键词self.url_info['url_name']= 'Fighter' ####此处可以根据要求修改关键词for page in range(1, self.settings.get('MAX_PAGE') + 1):data['pn'] = page * 30url = base_url + quote(data['queryWord']) + '&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&hd=&latest=©right=&word='+quote(data['word'])+'&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&pn='+quote(str(data['pn']))+'&rn=30&gsm=1e'yield Request(url, callback = self.parse)
items.py的代码修改为:
import scrapyclass BaiduImageItem(scrapy.Item):# define the fields for your item here like:MG_URLurl = scrapy.Field()url_name = scrapy.Field()url_seq = scrapy.Field()pass
pipelines.py的代码修改为:
from scrapy import Request
from scrapy.pipelines.images import ImagesPipelineclass BaiduImagePipeline(ImagesPipeline):def get_media_requests(self, item, info):file_meta = {}file_meta['url_name'] = item['url_name']file_meta['url_seq'] = item['url_seq']yield Request(item['url'], meta=file_meta)def file_path(self, request, response=None, info=None):url = request.urlformat = url.split('.')[-1]file_meta = request.metafile_name = file_meta['url_name']+'_'+str(file_meta['url_seq'])+'.'+formatreturn file_name
调试运行程序时,需要配置运行环境,将X:\Program Files\Python\Python38\Lib\site-packages\scrapy\cmdlines.py拷贝到建立项目文件夹中,与scrapy.cfg在相同目录,然后点击Pycharm界面中的Configurations,在弹出对话框中,按以下内容进行配置:
然后点击Pycharm中Run->Run’BaiduPicSpider’即可运行爬虫。
踩过的坑
- 在Pycharm安装scrapy可能会出现需要安装VC14 ++的情况,下载Twisted.whl,然后安装即可解决此问题。
- 在项目解释器(Project Interpreter)时,可以选择为Python安装目录中的python.exe,因为Pycharm针对每个项目都会建立虚拟环境,如果是自己联系,选择Python安装目录中的python.exe,则安装完所需安装包后,后续项目可以继续用。如果是开发项目,可以针对每个项目用专用的python.exe,这样方便移植。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
