python爬虫---scrapy框架(慕课北理嵩老师课堂笔记)

Scrapy爬虫框架

1、scrapy库:python第三方库,功能强大
(1)安装:管理员身份运行cmd 输入:pip install scrapy
可能会在安装Twisted出错,可以单独 pip install twisted (Linux系统是可以的,但是在win系统下需要MC++编译环境,因此可以下载Twisted-20.3.0-cp38-cp38-win_amd64.whl选择本地安装,需要cd更改目录到相应的文件中,文件说明:对应python 3.8 64位)
(2)不是一个函数功能库,而是一个框架,是一个软件结构和功能组件集合,约束了一个模板,包括七个部分,称为“5+2”模块,“5”:spoders ; item pipelines ; engine; downloader;scheduler ; “2”:downloader middleware;
来自慕课通过3个数据流进行连接;
用户需要编写spiders、item piplines和downloader模块

  • engine模块:控制所有模块之间的数据流;根据条件触发事件;不需要用户修改
  • downloader模块:获得请求,下载相应的网页;不需要用户修改;
  • scheduler模块:对所有爬取请求进行调度管理;不需要用户修改
  • downloaderMiddleware:中间件,对上面三种模块进行用户可配置的控制;修改、丢弃、新增请求或响应;
  • spider:解析downloader返回的response;产生爬取项以及额外的爬取请求;
  • item pipelines:以流水线方式处理spider产生的爬取项;由一组操作顺序组成,类似流水线,每个操作都是item pipeline类型;可能操作包括清理、检验和查重爬取项中的HTML数据,存储到数据库;
  • spider Middleware:对请求和爬取项在处理;丢弃、新增、修改请求和爬取项;用户可修改

2、requests vs scrapy
相同点:都可以进行页面请求和爬取;可用性好,简单;都没有处理js、提交表单、应对验证码等功能;
不同点:前者为网页级爬虫;后者为网站级爬虫;前者为功能库,后者为框架;
前者并发性性能差,后者较好;前者重点在于页面下载,后者在于爬虫结构;前者定制灵活,后者深度定制时较复杂;

3、scrapy常用的命令(可以在cmd中使用)
(1)命令格式:scrapy 命令 【options ] [ args]
命令包含:startproject ;genspider ;settings; crawl(运行) ;list ;shell
一个工程可包括多个爬虫
(2)采用命令行格式而不是图形界面,更容易自动化,适合脚本控制

4、scrapy爬虫的使用步骤:
创建一个工程和spider模板 -> 编写spider -> 编写item pipeline -> 优化配置

  • 优化配置中修改setting.py文件:
    CONCURRENT_REQUESTS(=32);CONCURRENT_ITEMS(=100);CONCURRENT_REQUESTS_PRE_DOMAIN(=8);CONCURRENT_REQUESTS_PRE_IP(=0);

5、步骤中涉及的类:
request类:表示http请求,由spider生成,由downloader执行;对象包括:url,method,headers,body,meta,copy();
response类:表示http相应,由downloader生成,spider处理;对象包括:url,status,headers,body,flags,request,copy();
item类:表示从html页面提取的信息内容,由spider生成,item pipeline处理;类似字典类型

6、提取信息的方法有很多,

  • beautifulsoup ;
  • lxml ;
  • re ;
  • XPath Selector;
  • CSS Selector; 基本使用:.css(“标签名::attr(属性名)”).extract()

实例

1、简单实例:
步骤:建立工程->生成爬虫->配置产生的spider-> 运行爬虫,获取网页

  • 创建一个工程文件夹,里面包含项目文件夹和配置文件
  • 在spiders文件夹中创建一个爬虫名的文件
  • 修改上面的文件内的链接列表变量start_urls,完成parse函数
    补充:yield 关键字:包含yield语句的函数为一个生成器,唤醒后每次产生一个值后被冻结
    具体写法:def gen(n): for i in range(n) :yield i**2
    常与for循环一起使用,for i in gen(5) ,相当于取回生成器的生成列表,但是
    节省空间
    2、
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值