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

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

时间: 2024-10-09 05:55:24

Scrapy基础一 ------学习Scrapy之前所要了解的的相关文章

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

Scrapy 和 scrapy-redis的区别 Scrapy 是一个通用的爬虫框架,但是不支持分布式,Scrapy-redis是为了更方便地实现Scrapy分布式爬取,而提供了一些以redis为基础的组件(仅有组件). pip install scrapy-redis Scrapy-redis提供了下面四种组件(components):(四种组件意味着这四个模块都要做相应的修改) Scheduler Duplication Filter Item Pipeline Base Spider sc

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

模拟登陆大体思路见此博文,本篇文章只是将登陆在scrapy中实现而已 之前介绍过通过requests的session 会话模拟登陆:必须是session,涉及到验证码和xsrf的写入cookie验证的问题:在scrapy中不需担心此问题,因为Request会保证这是一个会话,并且自动传递cookies原理想通,因为验证码识别的问题,这里先使用cookie模拟登陆 1 # -*- coding: utf-8 -*- 2 3 import scrapy 4 import json 5 import

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

注意:模拟登陆时,必须保证settings.py里的 COOKIES_ENABLED (Cookies中间件) 处于开启状态 COOKIES_ENABLED = True或 # COOKIES_ENABLED = False 策略一:直接POST数据(比如需要登陆的账户信息) # -*- coding: utf-8 -*- import scrapy class Renren1Spider(scrapy.Spider): name = "renren1" allowed_domains

Scrapy基础(十三)————ItemLoader的简单使用

ItemLoader的简单使用:目的是解决在爬虫文件中代码结构杂乱,无序,可读性差的缺点 经过之前的基础,我们可以爬取一些不用登录,没有Ajax的,等等其他的简单的爬虫回顾我们的代码,是不是有点冗长,将所需字段通过xpath或者css解析出来,再自定义语句(还不是函数中)进行清洗;然后再装入Item中,有没有这样一种方法:从Item中可以直接清洗岂不是很简单今天就学习 ItemLoader这样一种对戏,简单代码,可读增强 思路: 1,创建一个ItemLoad对象 2,通过该对象的add_css或

python爬虫scrapy命令工具学习之篇三

命令行工具(Command line tools) 全局命令 startproject settings runspider shell fetch view version 项目命令 crawl check list edit parse genspider deploy bench 1.创建爬虫工程的命令 scrapy startproject myproject 2.控制项目创建一个spider scrapy genspider mydomain mydomain.com 3.使用爬虫进行

scrapy基础

fetch:使用Scrapy下载器(downloader)下载给定的URL,并将获取到的内容送到标准输出 scrapy fetch --nolog http://www.23andme.com view:scrapy view 将页面download本地通过浏览器加载打开,发现淘宝和京东是不能加载出来的. scrapy view http://www.taobao.com scrapy view http://www.23mofang.com scrapy view http://www.jd.

【scrapy】学习Scrapy入门

Scrapy介绍 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中. 所谓网络爬虫,就是一个在网上到处或定向抓取数据的程序,当然,这种说法不够专业,更专业的描述就是,抓取特定网站网页的HTML数据.抓取网页的一般方法是,定义一个入口页面,然后一般一个页面会有其他页面的URL,于是从当前页面获取到这些URL加入到爬虫的抓取队列中,然后进入到新页面后再递归的进行上述的操作,其实说来就跟深度遍历或广度遍历一样. Scr

scrapy基础知识之 pycharm 调试小技巧:

在项目根目录下新建main.py文件,用于调试 from scrapy.cmdline import executeexecute(["scrapy","crawl","MySpider"])

Scrapy 基础-01

Scrapy Scrapy 是一个位了爬取网站数据,提取数据结构性数据而编写的应用框架,少量代码,就能快速爬取,使用了Twisted 异步网络框架,加快我们下载速度! 工作流程 制作 Scrapy 爬虫 一共需要4步:   新建项目 (scrapy startproject xxx):新建一个新的爬虫项目 明确目标 (编写items.py):明确你想要抓取的目标 制作爬虫 (spiders/xxspider.py):制作爬虫开始爬取网页 存储内容 (pipelines.py):设计管道存储爬取内