大概流程
8986d6be-2de6-47b6-9318-e6822b63bb08.png
一、制作Scrapy 爬虫 一共需要4步:
scrapy startproject 爬虫项目名称
编写items.py:明确你想要抓取的目标
scrapy genspider 爬虫文件名称 域名:制作爬虫开始爬取网页
二、这些简单的命令就是新建一个scrapy爬虫项目了,接下来就开始写代码了
1、是否遵守robot协议(为True表示遵守)
ROBOTSTXT_OBEY = False
2、设置下载延时(默认为0)
DOWNLOAD_DELAY = 1(秒)
3、构建一个请求头:设置'User-Agent'
DEFAULT_REQUEST_HEADERS = {
'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36',
4、激活管道,管道文件后面跟的数字, 表示的是优先级,数字越小,优先级越高
ITEM_PIPELINES = {
'chinaz.pipelines.ChinazPipeline': 300,
}
5、如果要是存储数据库就添加以下代码比如:
MYSQL_HOST = 'localhost'‘
#用户
MYSQL_USER = 'root'
#密码
MYSQL_PWD = 'a123'
#数据库
MYSQL_DB = 'wangzhandb'
class ChinazWebItem(scrapy.Item):
#标题
webName = scrapy.Field()
#周排名
weekRank = scrapy.Field()
#反连接数
linkNum = scrapy.Field()
#存储数据的容器,这是在item.py中定义你要爬取的字段
from chinaz.items import ChinazItem,ChinazWebItem
#修改起始的url (可以指定多个)
start_urls = ['你要爬取的url']
#接下来你只需要爬取你所需要的数据了
def req_url():
获取到你想要的数据。
要是获取到新的url,就发起新的响应
#使用yield函数
yield Request(url=parse.urljoin(新的url), meta={参数},
callback=你要调用的函数)
def parse_detail(self,response):
写你要爬取的数据
- (4)pipelines.py:#在这里做数据的过滤和持久化
- 注意:在使用管道之前,我们要先激活管道,在settings文件中激活
pipelines.py:设计管道存储爬取内容
如果要是存储数据库的话就添加下面的代码
class WangzhanprojectPipeline(object):
def __init__(self, host, user, pwd, db):
# 创建mysql连接
self.client = pymysql.Connect(host, user, pwd, db, charset='utf8')
# 创建游标
self.cursor = self.client.cursor()
@classmethod
def from_crawler(cls, crawler):
host = crawler.settings['MYSQL_HOST']
user = crawler.settings['MYSQL_USER']
pwd = crawler.settings['MYSQL_PWD']
db = crawler.settings['MYSQL_DB']
return cls(host, user, pwd, db)
#保存到本地
class ChinazPipeline(object):
def __init__(self):
#一般在初始化方法里面创建数据库连接,或者是文件
self.file = open('chinaz.json','a+')
self.webFile = open('chinazweb.json','a+')
在这里面处理引擎传过来的数据,进行保存
- (5)middlewaresSpider.py:中间件
三、各个py文件之间的关系
- (1) Scrapy Engine(引擎): 负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等。
- (2) Scheduler(调度器): 它负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。
- (3) Downloader(下载器):负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spider来处理,
- (4) Spider(爬虫):它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器),
- (5) Item Pipeline(管道):它负责处理Spider中获取到的Item,并进行进行后期处理(详细分析、过滤、存储等)的地方.
- (6) Downloader Middlewares(下载中间件):你可以当作是一个可以自定义扩展下载功能的组件。
- (7) Spider Middlewares(Spider中间件):你可以理解为是一个可以自定扩展和操作引擎和Spider中间通信的功能组件(比如进入Spider的Responses;和从Spider出去的Requests)