昨日回顾
1 安装模块,配套一个驱动(版本一定对应)
2 bro对象贯穿始终
3 bro.page_source(bs4,lxml)
4 内置的:find_element_by... find_elements_by css选择,xpath选择
5 标签的属性:get_attribute('属性名'), .text .size .location ,获取cookie:get_cookies()
6 执行js,打开标签,往下滑动
7 前进后退,标签的切换
8 动作链:鼠标点中,滑动某些标签
9 隐士等待,按键
今日内容
1 scrapy 介绍,架构介绍(框架)
5大组件
-引擎(EGINE):大总管,负责控制数据的流向
-调度器(SCHEDULER):由它来决定下一个要抓取的网址是什么,去重
-下载器(DOWLOADER):用于下载网页内容, 并将网页内
容返回给EGINE,下载器是建立在twisted这个高效的异步模型上的
-爬虫(SPIDERS):开发人员自定义的类,用来解析responses,并且提取items,或者发送新的请求request
-项目管道(ITEM PIPLINES):在items被提取后负责处理它们,主要包括清理、验证、持久化(比如存到数据库)等操作
2大中间件
-爬虫中间件:位于EGINE和SPIDERS之间,主要工作是处理SPIDERS的输入和输出(用的很少)
-下载中间件:引擎和下载器之间,加代理,加头,集成selenium
2 scrapy安装(windows,mac,linux)
1、pip3 install wheel
3、pip3 install lxml
4、pip3 install pyopenssl
5、下载并安装pywin32:https://sourceforge.net/projects/pywin32/files/pywin32/
6、下载twisted的wheel文件:http://www.lfd.uci.edu/~gohlke/pythonlibs/
7、执行pip3 install 下载目录Twisted-17.9.0-cp36-cp36m-win_amd64.whl
8、pip3 install scrapy
-D:Python36Scriptsscrapy.exe 用于创建项目
3 scrapy 创建项目,创建爬虫,运行爬虫
1 scrapy startproject 项目名
-scrapy startproject firstscrapy
2 创建爬虫
-scrapy genspider 爬虫名 爬虫地址
-scrapy genspider chouti dig.chouti.com
-一执行就会在spider文件夹下创建出一个py文件,名字叫chouti
3 运行爬虫
-scrapy crawl chouti
-scrapy crawl chouti --nolog
4 支持右键执行爬虫
-在项目路径下新建一个main.py
from scrapy.cmdline import execute
execute(['scrapy','crawl','chouti','--nolog'])
4 目录介绍
firstscrapy
firstscrapy
-spiders
-baidu.py
-chouti.py
-middlewares.py
-pipelines.py
-main.py
-items.py
-settings.py
scrapy.cfg
5 settings介绍
1 默认情况,scrapy会去遵循爬虫协议
2 修改配置文件参数,强行爬取,不遵循协议
-ROBOTSTXT_OBEY = False
3 USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'
4 LOG_LEVEL='ERROR'
6 爬取抽屉新闻
7 scrapy的数据解析(重点)
-response.xpath('//a[contains(@class,"link-title")]/text()').extract()
-response.xpath('//a[contains(@class,"link-title")]/@href').extract()
-response.css('.link-title::text').extract()
-response.css('.link-title::attr(href)').extract_first()
8 scrapy的持久化存储(重点)
scrapy crawl chouti -o chouti.csv
-在Items.py中写一个类
-在spinder中导入,实例化,把数据放进去
item['title']=title
item['url']=url
item['photo_url']=photo_url
yield item
-在setting中配置(数字越小,级别越高)
ITEM_PIPELINES = {
'firstscrapy.pipelines.ChoutiFilePipeline': 300,
}
-在pipelines.py中写ChoutiFilePipeline
-open_spider(开始的时候)
-close_spider(结束的时候)
-process_item(在这持久化)
补充
https://www.cnblogs.com/PythonLearner/p/13424051.html
https://juejin.im/post/6857287743966281736
作业:
1 新建scrapy项目,爬取抽屉数据,存到redis和mysql中
2 读http协议文章并整理https://juejin.im/post/6857287743966281736
3 爬取cnblogs首页文章,打印出标题和连接地址
4 (部分)爬取cnblogs文章,把标题连接地址和文章内容保存到mysql,连续爬取n页
5 (部分)登录到抽屉获取cookie,使用requests给文章点赞