博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
7 scrapy 初识
阅读量:5788 次
发布时间:2019-06-18

本文共 2406 字,大约阅读时间需要 8 分钟。

框架介绍: Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,非常出名,非常强悍。所谓的框架就是一个已经被集成了各种功能(高性能异步下载,队列,分布式,解析,持久化等)的具有很强通用性的项目模板。对于框架的学习,重点是要学习其框架的特性、各个功能的用法即可。

 

安装:  Linux:      pip3 install scrapy  Windows:      a. pip3 install wheel      b. 下载twisted http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted      c. 进入下载目录,执行 pip3 install Twisted‑17.1.0‑cp35‑cp35m‑win_amd64.whl      d. pip3 install pywin32      e. pip3 install scrapy

 

基础使用    1.创建项目:scrapy startproject 项目名称    2.cd  proName    3.创建爬虫文件scrapy genspider    4.执行scrapy crawl  spiderNamescrapy crawl  pa1 --nolog #忽略log日志
# -*- coding: utf-8 -*-import scrapyclass Pa1Spider(scrapy.Spider):    # 爬虫文件的名称    name = 'pa1'    # allowed_domains = ['www.xxx.com']   # 允许域名    start_urls = ['https://www.qiushibaike.com/text/']  # 起始url列表 可写多个    # 解析数据    def parse(self, response):  #响应        div_list = response.xpath('//div[@id="content-left"]/div')        names = []        for div in div_list:            # author = div.xpath('./div[1]/a[2]/h2/text()')[0].extract()            author = div.xpath('./div[1]/a[2]/h2/text()').extract_first()            names.append({
'name':author}) #必须封装到字典中 ('json', 'jsonlines', 'jl', 'csv', 'xml', 'marshal', 'pickle') return names # 持久化存储 # - 基于终端指令 特性:只能将parse方法的返回值存到磁盘里面       scrapy crawl first -o qiubai.csv #指定文件类型有要求.json .csv
# - 基于管道 pipelines

      - 数据解析        spider.py

      - 封装item类           items.py

      - 实例化item类型的对象  spider.py

      - 将解析倒的数据依次存储封装到item类型的对象中

      - 将item对象提交给管道   

     - 在管道中实现IO操作  spider.py

      - 开启管道  settings.py

  # 同一份数据存储到不同的平台:     管道文件定义多个类,之后settings.py里注册开启,根据优先级数字越小,越早执行,不同类之间传递item,在def process_item():中return item. # 全站数据的爬取: 不同页面   1 页面全添加到start_urls中,不建议,在url很多的时候不好   2 手动请求     设置url模板,%s %d 字符串格式化     手动请求发送写在哪里? 在parse方法     yield scrapy.Request(url=url,parse.callback) # 5大核心组件 爬虫:   干活的 管道:   接收item, 调度器: 下载器: 去互联网请求         下载中间件作用:拦截请求和响应       -拦截请求:         1 篡改请求头UA UA池,随机random.choice()         2 设置相关请求对象的代理IP(process_exception中) 引擎: 数据流处理,处理事务 # POST请求的发送:   重写def start_requests(self):       yield scrapy.FormRequest(url,callback,formdata)   scrapy 默认是自己处理cookie的, settings.py里面COOKIES_ENNABLE=False # 日志等级   settings.py 里面 LOG_LEVEL='ERROR' # 日志路径   settings.py 里面 LOG_FILE = 'path' # 请求传参的应用场景:   爬取和解析的数据不在同一张页面上面   在请求方法中使用meta(字典)参数,该字典会传递参数给回调函数     回调函数接收meta:response.meta['key']

 

 

转载于:https://www.cnblogs.com/zhangchen-sx/p/10822936.html

你可能感兴趣的文章
02-创建hibernate工程
查看>>
Open Graph Protocol(开放内容协议)
查看>>
模块化(1):基本思路
查看>>
Ubuntu18.04中配置QT5.11开发环境
查看>>
Exception的妙用
查看>>
基于浏览器的开源“管理+开发”工具,Pivotal MySQL*Web正式上线!
查看>>
JavaScript(五):变量的作用域
查看>>
知识图谱在互联网金融中的应用
查看>>
MySQL 到底能不能放到 Docker 里跑?
查看>>
wpf 自定义窗口,最大化时覆盖任务栏解决方案
查看>>
【docker】关于docker 中 镜像、容器的关系理解
查看>>
information_schema系列五(表,触发器,视图,存储过程和函数)
查看>>
瓜子二手车的谎言!
查看>>
[转]使用Git Submodule管理子模块
查看>>
DICOM简介
查看>>
Scrum之 Sprint计划会议
查看>>
List<T> to DataTable
查看>>
[Java]Socket和ServerSocket学习笔记
查看>>
stupid soso spider
查看>>
svn命令在linux下的使用
查看>>