Scrapy基础(一) ------学习Scrapy之前所要了解的
技术选型:
Scrapy vs requsts+beautifulsoup
1,reqests,beautifulsoup都是库,Scrapy是框架
2,Scrapy中可以加入requests beautifulsoup
3,Scrapy基于twisted,异步IO框架,性能最大的优势
4,Scrapy 扩展方便,提供了许多内置功能
5,内置css和xpath selector(都是c写的)非常方便,beautifulsoup(是纯python写的缺点就是慢)
网页分类
1,静态网页
2,动态页面
3,webservice(restapi)
爬虫能做什么
1,搜索引擎,百度google,垂直领域的搜索引擎
2,推荐引擎,--今日头条
3,机器学习的数据样本
4,数据分析,金融分析
正则表达式
1,为什么学习
精细化提取
2,基础内容
特殊字符
1)
^:^b 必须以b开头
. : 代表任意字符
* :前面出现的字符任意多次
$ : b$ 必须以b结尾的
? :非贪婪匹配模式,尽量少的匹配
+ :前面出现的字符出现(1,+00)
{2} : 前面的字符出现了两次
{3,}:前面的字符出现了最少3次
{2,5} : 前面的字符出现了2-5次
| : 数线 或的关系,先提取前面的
2)
[] : [abc] 从abc中都选一个都可以;[0-9a-Z]区间;[.]进入[]中的.*等没特殊意义;
[^1] 排除1的都可以匹配
手机号: "1[48357][0-9]{9}"
3)
\s : 空格
\S : 只要不是空格就匹配了
\w : 等价于[a-zA-Z0-9_]
\W : 除了[a-zA-Z0-9_]都匹配
4)
[\u4E00-\u9FA5] :值提取中文
\d : 数字
体会一下非贪婪匹配:
匹配boooobby 中的boooob
import re
a = "aaboooobby123"
match_obj = re.match(".*?(b.*?b).*",a)
if match_obj:
print(match_obj.group(1)) #输出匹配子串1
# ".*(b.*b).*" --> bb 贪婪匹配,从左边开始匹配或者
#说从右边开始找到最后一个符合条件的
# ".*?(b.*b).*" --> boooobb 括号中是贪婪匹配,直至找到最后一个b
#".*?(b.*?b).*" --> boooob 都是非贪婪匹配
网站的深度优先和广度优先
深度优先:
对于二叉树,先考虑一边,往深了寻找
Scrapy 默认也是深度优先,递归算法实现
广度优先:
优先兄弟节点而不是子节点;按每层遍历
通过队列形式实现
URL去重:
1,将URL报存到数据库,麻烦,慢 2,保存到set中,只需要O(1)代价就能查询URL
但是:一亿 100000000*2byte*50个字符/1024/1024=9G
小型爬虫一亿不多
3,url 经过md5等方法哈希后保存到set中
Scrapy采用的就是此;可将字符缩短到固定一般长度16个byte
4,bitmap方法将访问的URL通过hash函数映射到某一位
缺点:冲突可能性较大
5,bloomfilter方法对bitmap进行改进,多重hash函数降低冲突
Scrapy基础(一) ------学习Scrapy之前所要了解的的更多相关文章
- scrapy基础知识之 Scrapy 和 scrapy-redis的区别:
Scrapy 和 scrapy-redis的区别 Scrapy 是一个通用的爬虫框架,但是不支持分布式,Scrapy-redis是为了更方便地实现Scrapy分布式爬取,而提供了一些以redis为基础 ...
- Scrapy基础(十四)————Scrapy实现知乎模拟登陆
模拟登陆大体思路见此博文,本篇文章只是将登陆在scrapy中实现而已 之前介绍过通过requests的session 会话模拟登陆:必须是session,涉及到验证码和xsrf的写入cookie验证的 ...
- scrapy基础知识之 scrapy 三种模拟登录策略:
注意:模拟登陆时,必须保证settings.py里的 COOKIES_ENABLED (Cookies中间件) 处于开启状态 COOKIES_ENABLED = True或 # COOKIES_ENA ...
- scrapy基础知识之scrapy自动下载图片pipelines
需要在settings.py配置: ITEM_PIPELINES = { 'scrapy.pipelines.images.ImagesPipeline': 1, }import os IMAGES_ ...
- 爬虫基础线程进程学习-Scrapy
性能相关 学习参考:http://www.cnblogs.com/wupeiqi/articles/6229292.html 在编写爬虫时,性能的消耗主要在IO请求中,当单进程单线程模式下请求URL时 ...
- 0.Python 爬虫之Scrapy入门实践指南(Scrapy基础知识)
目录 0.0.Scrapy基础 0.1.Scrapy 框架图 0.2.Scrapy主要包括了以下组件: 0.3.Scrapy简单示例如下: 0.4.Scrapy运行流程如下: 0.5.还有什么? 0. ...
- 学习scrapy爬虫框架的一些经验和教训
首先python的scrapy框架很好,功能强大,使用起来也很方便,省去了很多造轮子的时间.在学习的过程中也碰到了一些问题,在这里希望能分享与大家分享,做一个参考 1.安装(pip延时响应问题) sc ...
- scrapy爬虫框架学习笔记(一)
scrapy爬虫框架学习笔记(一) 1.安装scrapy pip install scrapy 2.新建工程: (1)打开命令行模式 (2)进入要新建工程的目录 (3)运行命令: scrapy sta ...
- 学习scrapy框架爬小说
一.背景:近期学习python爬虫技术,感觉挺有趣.由于手动自制爬虫感觉效率低,了解到爬虫界有先进的工具可用,尝试学学scrapy爬虫框架的使用. 二.环境:centos7,python3.7,scr ...
随机推荐
- linux 将自己的服务添加到系统service服务
前言 我们在linux上要启动一个程序得时候, 往往都是要写一堆路径, 找到要启动得服务程序, 再用 ./*** 启动服务. 那么我们有没有快速启动方法吗, 答案是肯定得 service 介绍 官方介 ...
- 多版本python安装第三方库
1.先进入对应版本的python 2.使用命令安装:./pip install xxx
- Python关键字及其用法
Python有哪些关键字 -Python常用的关键字 and, del, from, not, while, as, elif, global, or, with, assert, else, if ...
- 插件使用一颜色选择器---cxColor
cxColor 是一款颜色选择器.这样的插件使用场景不多.可喜的这是国人写的. 官方网站: https://github.com/ciaoca/cxColor 使用方法: 1.引入jquery库 1 ...
- C#矩阵求逆
来源:http://zhidao.baidu.com/link?url=DiqAbq9YUYn3z7QjxGGoF0PLZwN-Y9ecqKB7Gy38JWRD1riMIYukVKXKq88pxtWL ...
- C#学习-面向对象语言都有类
面向对象语言的一个基本特征是它们都有类,类是C#(这类语言)中的一种复杂数据类型. 类代表一组具有公共属性和行为的对象. 在C#中定义一个类是非常简单的,只需使用class关键字并按格式来定义即可. ...
- JVM 方法区内存扩大 以及开启GC
因为应用使用了OSGi框架,<深入理解JAVA虚拟机>中对使用OSGi时可能产生的方法区溢出有所描述 第一部分: 第二部分 可见,OSGi会动态生成大量Class,在OSGi中,即使是同一 ...
- [转] jQuery的deferred对象详解
jQuery的开发速度很快,几乎每半年一个大版本,每两个月一个小版本. 每个版本都会引入一些新功能.今天我想介绍的,就是从jQuery 1.5.0版本开始引入的一个新功能----deferred对象. ...
- python之https爬虫出现 SSL: CERTIFICATE_VERIFY_FAILED (同时打开fiddler就会出现)
1.参考 Py 坑之 CERTIFICATE_VERIFY_FAILED Python 升级到 2.7.9 之后引入了一个新特性,当你urllib.urlopen一个 https 的时候,会验证一次 ...
- mysql基础理论
第一节数据库管理系统概述 在www.db-engines.com/en/ 这个网站中可以看到对数据库的排名 数据库分为: 关系型数据库: mysql------mariaDB oracle 非关系型数 ...