博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Scrapy基础(一) ------学习Scrapy之前所要了解的
阅读量:7286 次
发布时间:2019-06-30

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

技术选型:    

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

1 import re2 a = "aaboooobby123"3 match_obj = re.match(".*?(b.*?b).*",a)4 if match_obj:5     print(match_obj.group(1)) #输出匹配子串16 #  ".*(b.*b).*"   -->  bb   贪婪匹配,从左边开始匹配或者7 #说从右边开始找到最后一个符合条件的8 #  ".*?(b.*b).*"  -->  boooobb 括号中是贪婪匹配,直至找到最后一个b9 #".*?(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函数降低冲突

转载于:https://www.cnblogs.com/ruoniao/p/6849600.html

你可能感兴趣的文章
js创建对象的几种常用方式
查看>>
SQL Server AlwaysOn可用性及故障转移
查看>>
Spring Cloud 注册中心高可用搭建
查看>>
js 简单版本号比较
查看>>
Linux用户配置sudo权限(visudo)
查看>>
rocketmq 事物消息压测
查看>>
eclipse debug 多线程
查看>>
ubuntu System Settings 里面的内容显示不正常
查看>>
Udp传输入门
查看>>
什么是阻塞队列?如何使用阻塞队列来实现生产者-消费者模型?
查看>>
3.C#.Net 英汉词典的编写
查看>>
shell习题_6
查看>>
Ubuntu 14.04双显卡出现"未知显示器"问题
查看>>
Golang学习(15)——Unicode utf16包
查看>>
封装允许执行命令有超时
查看>>
一种字符编码猜测工具的实现方法
查看>>
LeetCode:Consecutive Numbers - 找出连续出现的数字
查看>>
23种常用设计模式简介
查看>>
自定义view步骤
查看>>
网卡故障:弹出界面eth0: 错误:没有找到合适的设备:没有找到可用于链接System eth0 的...
查看>>