scrapy的基本用法
1. 通过命令创建项目scrapy startproject 项目名称
2. 用pycharm打开项目
3. 通过命令创建爬虫
scrapy genspider 爬虫名称 域名
4. 配置settings
robots_obey=False
Download_delay=0.5
Cookie_enable=False
5. 自定义UserAgentMiddleWare
可以直接粘现成的
或者自己通过研究源码实现
6.在items文件里定义数据模型
7. 开始解析数据
1) 先大致规划一下需要几个函数
2) 函数1跳转到函数2使用 yield scrapy.Request(url,callback,meta,dont_filter)
3). 将数据封装到items,记得yield item
8. 自定义pipelines将数据存储到数据库/文件中
举例:爬取天堂网图片
1.创建项目
scrapy startproject
2.用pycharm打开项目
3.通过命令创建爬虫 在pycharm终端创建
scrapy genspider ivsky ivsky.com
4. 配置settings
以代码说明,没有说明的表示不用修改 共有四处需要修改的地方
# Obey robots.txt rules
# robots.txt 这个文件是一种协议用于告诉爬虫哪些网站你不能爬
# 例如:http://www.baidu.com/robots.txt
# 默认遵守,一般需要改为False
ROBOTSTXT_OBEY = False
# 放慢爬取速度,防止被发现
DOWNLOAD_DELAY = 0.5
#禁用cookie追踪
# Disable cookies (enabled by default)
COOKIES_ENABLED = False
DOWNLOADER_MIDDLEWARES = {
# 数字表示优先级,越小越先执行 如果填为None 表示不执行
#自己定义的
'IvskySpider.middlewares.UserAgentMiddleware': 543,
#优先选择系统的user-agent 所以要将系统的参数改为None
#ExternalLiberaries-->site-packages-->scrapy-->downloadermiddlewares-->useragent.py
#根据以上路径找到系统定义的有关User-Agent类UserAgentMiddleware
'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None
}
5.自定义UserAgentMiddleWare
在middlewares.py文件中写入类UserAgentMiddleware, 此类可先根据下面路径从文件里粘贴,然后再根据需要修改
具体路径:
ExternalLiberaries-->site-packages-->scrapy-->downloadermiddlewares-->useragent.py
此处将middlewares.py文件中所有的代码都展示了出来,类UserAgentMiddleware放在最后,其他的类都是自动生成的
# -*- coding: utf-8 -*-
# Define here the models for your spider middleware
#
# See documentation in:
# https://doc.scrapy.org/en/latest/topics/spider-middleware.html
from scrapy import signals
from fake_useragent import UserAgent
class IvskyspiderSpiderMiddleware(object):
# Not all methods need to be defined. If a method is not defined,
# scrapy acts as if the spider middleware does not modify the
# passed objects.
@classmethod
def from_crawler(cls, crawler):
# This method is used by Scrapy to create your spiders.
s = cls()
crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)
return s
def process_spider_input(self, response, spider):
# Called for each response that goes through the spider
# middleware and into the spider.
# Sh