还可以设置日志的等级与日志存放的路径:
【python爬虫之Scrapy框架,基本介绍使用以及用框架下载图片案例】相关变量
LOG_LEVEL= ""LOG_FILE="日志名.log"
日志等级分为,默认等级是1
- DEBUG 调试信息
- INFO 一般信息
- WARNING 警告
- ERROR 普通错误
- CRITICAL 严重错误
LOG_LEVEL="WARNING",就只会WARNING等级之下的ERROR和CRITICAL
一般主要需要配置的几个参数,其他按需配置即可 。
USER_AGENT:默认是注释的,这个东西非常重要,如果不写很容易被判断为电脑爬虫 。
ROBOTSTXT_OBEY:是否遵循机器人协议,默认是true,需要改为false,否则很多东西爬不了
DEFAULT_REQUEST_HEADERS:和USER_AGENT类似,只是参数更完整 。
五、完整案例(下载图片)用scrapy框架下载以前的示例:python爬虫之批量下载图片
1、修改settings.py 主要参数
#关闭robot.txt协议ROBOTSTXT_OBEY = False#页面延迟下载,我这里测试,可以先不设置DOWNLOAD_DELAY = 1# 是否启用CookieCOOKIES_ENABLED = True#请求头 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/106.0.0.0 Safari/537.36'}#打开下载器DOWNLOADER_MIDDLEWARES = {'ScrapyDemmo.middlewares.ScrapydemmoDownloaderMiddleware': 543,}#打开优先级,并添加自己编写的图片下载管道ITEM_PIPELINES = {'ScrapyDemmo.pipelines.ScrapydemmoPipeline': 300,'ScrapyDemmo.pipelines.ImageDownloadPipeline': 300,}#添加下载储存目录IMAGES_STORE = 'D:Pythonpic'# 文件保存时间#IMAGES_EXPIRES = 90
2、定义Item字段(Items.py)本项目用于下载图片,因此可以仅构建图片名和图片地址字段 。
import scrapyclass ScrapydemmoItem(scrapy.Item): #图片下载链接image_url = scrapy.Field()#图片名称image_name = scrapy.Field()
3、编写爬虫文件(spiders目录下)这里文件名为:image_download.py
以前用requests库和BeautifulSoup库下载图片,这里就不需要了,scrapy自带相关函数和方法 。
scrapy元素定位,提供三种方式,正则、Xpath表达式、css 。
我这里有xpath定位方式 。
import scrapyimport refrom ..items import ScrapydemmoItemclass ImageSpider(scrapy.Spider):name = 'image_download'allowed_domains = ['desk.3gbizhi.com']start_urls = ['https://desk.3gbizhi.com/deskMV/index.html']def parse(self, response):#导入Items.py字段items = ScrapydemmoItem()#获取所有链接列表lists = response.xpath('//div[5]/ul/li')#点位元素循环获取图片链接和图片名称for i in lists:#图片名称image_name = i.xpath('./a/img/@alt').get()#图片链接items['image_url'] = i.xpath('./a/img/@*[1]').get().replace('.278.154.jpg', '')#图片格式类型image_type = re.sub(r'h.*d+.', '', items['image_url'])#拼接文件名,图片名称+图片格式items['image_name'] = '{}.{}'.format(image_name, image_type)yielditems#循环跳转下一页,并重复返回数据,这里测试先下载1页的图片,总共23页 。for i in range(2,3):next_url = 'https://desk.3gbizhi.com/deskMV/index_{}.html'.format(i)yield scrapy.Request(next_url,callback=self.parse)
关于 yield 的理解,?先,如果你还没有对yield有个初步分认识,那么你先把yield看做“return”,这个是直观的,它?先是个return 。最主要的不同在于yield在返回值后还可以继续运行接下来的代码,使用的函数会返回一个生成器,而return在返回后就不在执行代码 。
以上两个yield:
- yield items:这里我们通过 yield 返回的不是 Request 对象,而是一个 ScrapydemmoItem 对象 。scrap有框架获得这个对象之后,会将这个对象传递给 pipelines.py来做进一步处理 。我们将在 pipelines.py里将传递过来的 scrapy.Item 对象保存到数据库里去 。
- yield scrapy.Request:这里是在爬取完一页的信息后,我们在当前页面获取到了下一页的链接,然后通过 yield 发起请求,并且将 parse 自己作为回调函数来处理下一页的响应 。
除了爬取文本,我们可能还需要下载文件、视频、图片、压缩包等,这也是一些常见的需求 。scrapy提供了FilesPipeline和ImagesPipeline,专门用于下载普通文件及图片 。
继承 Scrapy 内置的 ImagesPipeline,只需要重写get_media_requests 和item_completed函数即可 。
推荐阅读
- python + selenium实现gitlab全文搜索
- 王冰冰|王冰冰要回来了!加盟《国之大雅》节目,土土却阴阳怪气内涵王冰冰
- 普洱茶中异味,普洱茶品鉴之闻茶
- 郭希宽|许敏提前出院是另有隐情?郭希宽回应网友质疑,偷换之说再添疑点
- 俄罗斯地狱之门40秒 俄罗斯地狱之声40秒辟谣
- 心理学动物效应之鲶鱼效应 鲇鱼效应
- 孙芸芸|小S蔡康永眼中的“天之娇女”台湾第一名媛孙芸芸活得有多清醒?
- 如何学习音标之元音【1】
- 值得买的办公笔记本 5000以下的办公笔记本性价比之王
- 北京属于中国八大古都之一吗 北京是我国著名的四大古都