scrapy

windos下scrapy框架的安装

1
2
3
4
5
6
7
8
9
10
1.pip install wheel
2.下载twisted 下载地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/ #根据自己系统版本下载
3.安装twisted cd进入你下载twisted的包中 pip install Twisted-20.3.0-cp38-cp38-win32.whl
4.pip install pywin32
5.pip install scrapy

ps:若提示error: Microsoft Visual C++ 14.0 or greater is required. Get it with “Microsoft C++ Build Tools“去安装对应的c++ 14.0的工具包即可,下面有链接

链接:https://pan.baidu.com/s/1T77yLvbnnUjQaT5fBIDCqQ
提取码:1rx9

scrapy的简单使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
1.创建一个工程 scrapy startproject 项目名称
2.cd进入项目 创建爬虫文件 scrapy genspider 文件名 网址
3.工程执行 scrapy crawl 文件名
#新建的爬虫文件内的代码
class FirstSpider(scrapy.Spider):
name = 'first' # 文件名
allowed_domains = ['www.baidu.com'] # 允许爬取哪个域名,一般注释
start_urls = ['http://www.baidu.com/'] # 运行程序时哪些网址被爬取

def parse(self, response):
pass

4.在settings 中将 ROBOTSTXT_OBEY改为False
LOG_LEVEL = 'ERROR' 这样的话只会将错误信息打印

scrapy框架的基本架构

image-20210202091601772

1
2
3
4
5
6
7
8
9
五大组件:
spiders:爬虫程序
engine:引擎,用于控制各个组件之间的沟通
pipline:持久化操作,爬取成功后入库
scheduler:调度器,调度谁先爬,谁后爬,同时达到去重的效果
downloader:下载器,真正爬取数据的
两大中间件:
爬虫中间件:介于爬虫程序和引擎之间,一般不写
下载中间件:介于下载器和引擎之间

scrapy目录

1
2
3
4
5
6
7
8
9
firstscrapy        #项目名字
firstscrapy #文件夹
spiders #爬虫文件存放目录
cnblogcrawler.py #爬虫文件
items.py #写一些类,对比django的models
middlewares.py #中间件
pipelines.py #持久化相关操作位置
settings.py #配置文件
scrapy.cfg #上线相关

使用文件执行运行命令

1
2
3
4
5
6
7
现在我们每次执行爬虫程序都需要使用命令,较为麻烦,我们可以新建一个py文件,然后在文件内写上对应的命令,下次直接执行文件即可。

#文件内容
from scrapy.cmdline import execute
execute(['scrapy','crawl','cnblogcrawler','--nolog']) #里面写命令

ps:同时只能执行一个爬虫程序

scrapy中response的基本方法

1
2
1.text #获得爬取页面的页面数据
eg: text = response.text

scrapy提供的解析方法

1
2
3
4
5
6
7
8
9
#xpath    
xpath() #我们调用该方法可以直接使用xpath解析的方式去解析数据

#css 使用css选择器解析
css()

ps:解析完成后我们获得的是一个对象,我们可以使用下述方法获得其中的数据
extract() #这个取出来是列表的形式
extract_first() #取列表的第一个

xpath取数据

1
2
3
4
5
#取文本
/text()

#取属性
/@href

css选择器取数据

1
2
3
4
5
6
7
#取文本
::text
eg:
article.css('.post-item-title::text').extract_first()

#取属性
::attr(属性名)

scrapy解析出新地址后继续爬取

1
2
3
在解析的函数最后添加一个yield 
yield Request(url=url,callback=self.parser_detail) #callback代表爬取成功后去的函数
ps:callback不写,默认返回现在的request

scrapy参数的配置

1
2
3
4
5
6
1.是否遵循爬虫协议
ROBOTSTXT_OBEY = False
2.浏览器类型(默认写的是scrapy,)
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'
3.日志级别
LOG_LEVEL='ERROR'