5 scrapy

 

1 scrapy介绍和安装创建项目

# Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的,使用它可以以快速、简单、可扩展的方式从网站中提取所需的数据
# 模块---》scrapy是一个框架--》类似于web框架django
# scrapy就是爬虫界的django
# twisted是一个流行的事件驱动的python网络框架,异步非阻塞

 

img

# 分层---》分模块--》分组件
#### 5大组件
# 引擎(EGINE)---》大总管
引擎负责控制系统所有组件之间的数据流,并在某些动作发生时触发事件。有关详细信息,请参见上面的数据流部分。

# 调度器(SCHEDULER)
用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. 可以想像成一个URL的优先级队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址

# 下载器(DOWLOADER)
用于下载网页内容, 并将网页内容返回给EGINE,下载器是建立在twisted这个高效的异步模型上的

# 爬虫(SPIDERS)---》我们写代码的地方
SPIDERS是开发人员自定义的类,用来解析responses,并且提取items,或者发送新的请求

# 项目管道(ITEM PIPLINES)
在items被提取后负责处理它们,主要包括清理、验证、持久化(比如存到数据库)等操作


### 两大中间件
# 下载器中间件(Downloader Middlewares)---》用的多--》设置请求头,设置cookie,设置代理
位于Scrapy引擎和下载器之间,主要用来处理从EGINE传到DOWLOADER的请求request,已经从DOWNLOADER传到EGINE的响应response,你可用该中间件做以下几件事
# 爬虫中间件(Spider Middlewares)
位于EGINE和SPIDERS之间,主要工作是处理SPIDERS的输入(即responses)和输出(即requests)

 

# 安装
# linux/mac
pip3 install scrapy
# win 如果装不上
1、pip3 install wheel #安装后,便支持通过wheel文件安装软件,wheel文件官网:https://www.lfd.uci.edu/~gohlke/pythonlibs
   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/#twisted
   7、执行pip3 install 下载目录\Twisted-17.9.0-cp36-cp36m-win_amd64.whl
   8、pip3 install scrapy

# 创建scrapy项目--》框架--》django创建项目类似
scrapy startproject crawl_cnblogs
 
# 创建爬虫爬取cnblogs--》django创建app
scrapy genspider cnblogs www.cnblogs.com
 
 
# 注意:pycharm直接支持创建django项目---》使用django-admin命令创建项目--》使用pycharm打开

 

 

2 目录介绍

crawl_cnblogs    # 项目名字
-crawl_cnblogs   # 目录
-__init__.py
   -spiders      # 爬虫文件夹,内部放了很多爬虫
-__init__.py
     -cnblogs.py # 爬虫文件
     -chouti.py  # 爬虫文件
-items.py     # 模型类--》类似于django的models
   -middlewares.py # 爬虫中间件和下载中间件
   -pipelines.py   # 持久化的位置(文件,mysql)
   -settings.py    # 整个项目配置文件
 -scrapy.cfg       # 项目上线相关

 

3 爬虫启动和解析数据

# 启动爬虫--》一个个启动
scrapy crawl 爬虫名字
scrapy crawl cnblogs
scrapy crawl cnblogs --nolog  # 不打印日志

# 创建一个py文件,使用py文件启动 run.py
from scrapy.cmdline import execute
execute(['scrapy', 'crawl', 'cnblogs','--nolog'])

# 以后右键运行,就可以运行爬虫


## 数据解析
 -数据解析
   -xpath
      -拿文本:'.//a/text()'
      -拿属性:'.//a/@href'
    -css
      -拿文本:'a.link-title::text'
      -拿属性:'img.image-scale::attr(src)'
    -取一条;extract_first()
    -取多条:extract()
     
     

## 继续爬取下一页


## 存储数据

## 详情看代码

 

4 爬虫中间件和下载中间件

# 下载中间件---》用的多
# 1 修改请求头
# 2 加cookie
# 3 加代理
class CrawlCnblogsDownloaderMiddleware:

   @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_request(self, request, spider):
       # 请求头
       print('header:',request.headers)
       request.headers['User-Agent']='Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.74 Safari/537.36'
       # cookie
       print('cookie:', request.cookies)

       '''
      ### 加cookie--->登陆成功后,构建一个cookie池--》随机拿出一个cookie
      # print('cookie:',request.cookies)
      # # 可以放单个值
      # request.cookies['name']='lqz'
      # # 可以直接赋值给一个字典
      # request.cookies= {}

      # 打印请求头
      # print('header:',request.headers)
      #加请求头
      # request.headers['Auth']='asdfasdfasdfasdf'
      # 修改请求头的客户端类型
      # 插件,随机弹出一个请求头
      # request.headers['USER-AGENT']='ssss'
      #可以使用
       
      from fake_useragent import UserAgent
      ua = UserAgent()
      print(ua.ie)   #随机打印ie浏览器任意版本
      print(ua.firefox) #随机打印firefox浏览器任意版本
      print(ua.chrome) #随机打印chrome浏览器任意版本
      print(ua.random) #随机打印任意厂家的浏览器  
      request.headers['USER-AGENT']=ua.random  
   
      # 加代理
      # 之前代理池搭建好了,使用requests模块向代理池地址发送请求随机获取一个代理,拼在后
      # request.meta['proxy']='http://103.130.172.34:8080'

      # return None
 
       
 
      '''

       return None

 

 

 

 

posted @ 2022-03-21 21:33  甜甜de微笑  阅读(41)  评论(0编辑  收藏  举报