技术选型:

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之前所要了解的的更多相关文章

  1. scrapy基础知识之 Scrapy 和 scrapy-redis的区别:

    Scrapy 和 scrapy-redis的区别 Scrapy 是一个通用的爬虫框架,但是不支持分布式,Scrapy-redis是为了更方便地实现Scrapy分布式爬取,而提供了一些以redis为基础 ...

  2. Scrapy基础(十四)————Scrapy实现知乎模拟登陆

    模拟登陆大体思路见此博文,本篇文章只是将登陆在scrapy中实现而已 之前介绍过通过requests的session 会话模拟登陆:必须是session,涉及到验证码和xsrf的写入cookie验证的 ...

  3. scrapy基础知识之 scrapy 三种模拟登录策略:

    注意:模拟登陆时,必须保证settings.py里的 COOKIES_ENABLED (Cookies中间件) 处于开启状态 COOKIES_ENABLED = True或 # COOKIES_ENA ...

  4. scrapy基础知识之scrapy自动下载图片pipelines

    需要在settings.py配置: ITEM_PIPELINES = { 'scrapy.pipelines.images.ImagesPipeline': 1, }import os IMAGES_ ...

  5. 爬虫基础线程进程学习-Scrapy

    性能相关 学习参考:http://www.cnblogs.com/wupeiqi/articles/6229292.html 在编写爬虫时,性能的消耗主要在IO请求中,当单进程单线程模式下请求URL时 ...

  6. 0.Python 爬虫之Scrapy入门实践指南(Scrapy基础知识)

    目录 0.0.Scrapy基础 0.1.Scrapy 框架图 0.2.Scrapy主要包括了以下组件: 0.3.Scrapy简单示例如下: 0.4.Scrapy运行流程如下: 0.5.还有什么? 0. ...

  7. 学习scrapy爬虫框架的一些经验和教训

    首先python的scrapy框架很好,功能强大,使用起来也很方便,省去了很多造轮子的时间.在学习的过程中也碰到了一些问题,在这里希望能分享与大家分享,做一个参考 1.安装(pip延时响应问题) sc ...

  8. scrapy爬虫框架学习笔记(一)

    scrapy爬虫框架学习笔记(一) 1.安装scrapy pip install scrapy 2.新建工程: (1)打开命令行模式 (2)进入要新建工程的目录 (3)运行命令: scrapy sta ...

  9. 学习scrapy框架爬小说

    一.背景:近期学习python爬虫技术,感觉挺有趣.由于手动自制爬虫感觉效率低,了解到爬虫界有先进的工具可用,尝试学学scrapy爬虫框架的使用. 二.环境:centos7,python3.7,scr ...

随机推荐

  1. CentOS7+mysql(yum)

    1.现在centos上默认是没有yum源的,yum安装的是 MariaDB.所以我们需要自己先配置yum源.配置yum源步骤如下: 下载yum源:wget 'https://dev.mysql.com ...

  2. delete web server(nginx)

    #!/bin/bash conf_dir1="/usr/local/nginx/conf/vhost.d" #conf_dir2="/usr/local/apache2/ ...

  3. txt文档去重复内容

    @echo off for /f "delims=" %%i in ('type "%1"') do (if not defined %%i set %%i=A ...

  4. PAT Basic 1065 单身狗

    单身狗(25) 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue "单身狗"是中文对于单身人士的 ...

  5. PEM routines:PEM_read_bio:no start line

    https://blog.csdn.net/xiejunna/article/details/71151006 在放置证书后,运行nodejs抛异常:PEM routines:PEM_read_bio ...

  6. .NetCore 下开发独立的(RPL)含有界面的组件包 (五)授权过滤参数处理

    .NetCore 下开发独立的(RPL)含有界面的组件包 (一)准备工作 .NetCore 下开发独立的(RPL)含有界面的组件包 (二)扩展中间件及服 务 .NetCore 下开发独立的(RPL)含 ...

  7. Sqlserver2014 Master....提示异常,IIS未安装

    Q:使用Windos认证,登录失败,问题待解决补充 Q:打开Sqlserver2014  Master....提示异常,IIS未安装 解决方案: 安装iis配置,并全部勾选asp.net特性等 Tip ...

  8. js 2017

    JS面向对象 <script> function num(val) { return val * 8 } function Index(name, age) { this.name = n ...

  9. MySQL基础一(CMD使用)

    概述 MySQL因可移植行高,安装简单小巧等优点被更多的开发者喜爱.执行MySQL的指令的方式有2种方式,方式一.MySQL的客户端软件比如navicat :方式二.通过Cmd命令: CMD命令执行方 ...

  10. 【loj6029】「雅礼集训 2017 Day1」市场&&【uoj#228】基础数据结构练习题

    题解: 这两道题加上区间取min max应该算线段树几道比较不寻常的题目 其实也是挺好理解的 对于区间/d 显然在log次后就会等于0 而我们注意到如果区间中数都相等那么就可以一起除 也就是说每个区间 ...