博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
scrapy爬虫系列之开头--scrapy知识点
阅读量:5217 次
发布时间:2019-06-14

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

介绍:Scrapy是一个为了爬取网站数据、提取结构性数据而编写的应用框架,我们只需要实现少量的代码,就能够快速抓取。

Scrapy使用了Twisted异步网络框架,可以加快我们的下载速度。

0、说明:
  保存数据的方法有4种(json、jsonl、csv、xml),-o 输出指定格式的文件
  scrapy crawl 爬虫名称 -o aa.json
  在编写Spider时,如果返回的不是item对象,可以通过scrapy crawl 爬虫名称 -o aa.json 爬取数据输出到本地,保存为aa.json文件
1、使用步骤
  1.1 新建项目:scrapy startproject xxx
  1.2 生成爬虫:scrapy genspider aaa "http://www.aaa.com"
  1.3 明确目标:编写items.py,明确要提取的数据
  1.4 编写爬虫:spiders/xx.py,编写爬虫文件,处理请求和响应,以及提取数据(yield item)
  1.5 存储内容:pipelines.py,编写管道文件,处理spider返回的item数据
  1.6 设置配置:settings.py, 启动管道组件,以及其他相关配置
  1.7 执行爬虫:scrapy aaa 爬虫名称
2、安装:
  pip3 install scrapy

3、命令

  scrapy bench 测试
  scrapy fetch "http://www.baidu.com" 爬取页面
  scrapy genspider 爬虫名称 'http://www.baidu.com' 生成一个爬虫
  scrapy runspider 运行一个爬虫
  scrapy shell "url地址" 发送完请求后,用shell交互读取响应内容
    response.body 响应体,response.body.decode()
    response.headers 报头
    response.selector Selector对象,此时可以通过response.selector.xpat() 或response.selector.css()来对response进行查询,或者把中间的selector省略也可以使用(新版)
    Selector选择器,有4个基本的方法,最常用xpath
      xpath(),传入xpath表达式,返回该表达式所对应的所有结点的selector list列表,使用方式:response.xpath("表达式")
      extract(),序列化该结点为Unicode字符串并返回列表
      css(),插入css表达式,返回该表达式所对应的所有结点的selector list列表,语法同 bs4
      re(),根据传入的正则表达式进行提取,返回Unicode字符串列表
  scrapy startproject 创建项目
  scrapy list 查看项目下有多少个爬虫
4、其他
  CrawlSpider

5、使用pipeline

  可以有多个,为什么要有多个?
    不同的pipeline处理不同的item的内容
    一个spider的内容可能要做不同的操作,比如存入不同的数据库中
  5.1 一个爬虫项目,包含多个爬虫,爬取多个网站,可以建多个Spider
  5.2 当有多个爬虫,一个pipeline时,如何操作不同的数据呢?
    可以在爬虫返回item时,加:item["come_from"] = '网站1',然后在pipeline的process_item方法里进行判断:if item["come_from"] == '网站1': do something
    或者,根据spider.name来进行判断是哪个spider返回的数据
6、日志logging
  普通用法:
    import logging
    logging.warning()
  scrapy中的用法:
    settings里配置日志级别:LOG_LEVEL = "WARNING"
    settings里配置日志存放位置:LOG_FILE = './log.log' 当前目录
  普通py项目的日志用法
    import logging
    logging.basicConfig(filename='example.log',level=logging.DEBUG) #还有很多参数可以设置
    logger = logging.getLogger(__name__)
    logger.warning("ssssssssss")

转载于:https://www.cnblogs.com/bookwed/p/10618002.html

你可能感兴趣的文章
UITabbarController的UITabbarItem(例:"我的")点击时,判断是否登录
查看>>
UNIX基础知识之输入和输出
查看>>
【洛谷 P1666】 前缀单词 (Trie)
查看>>
对称加密和非对称加密
查看>>
数据库锁机制及乐观锁,悲观锁的并发控制
查看>>
图像处理中双线性插值
查看>>
RobHess的SIFT代码解析之RANSAC
查看>>
03 线程池
查看>>
201771010125王瑜《面向对象程序设计(Java)》第十三周学习总结
查看>>
java中内部类的讲解
查看>>
手机验证码执行流程
查看>>
python 基础 ----- 变量
查看>>
设计模式课程 设计模式精讲 2-2 UML类图讲解
查看>>
Silverlight 的菜单控件。(不是 Toolkit的)
查看>>
:hover 鼠标同时触发两个元素变化
查看>>
go语言学习十三 - 相等性
查看>>
Idea 提交代码到码云(提交到github也大同小异)
查看>>
c#连接excel2007未安装ISAM解决
查看>>
Mono 异步加载数据更新主线程
查看>>
初识lua
查看>>