命令行输入:scrapy genspider --list 可以看到scrapy给我们提供的爬虫模板:

basic
crawl
csvfeed
xmlfeed

一般都是用默认模板生成的spider,如果需要选择模本可以用命令:

scrapy genspider -t crawl ....

关于pacharm中python的模块导入问题,正在编辑的模块如果希望作为导入模块的根目录可以右键项目文件然后如下图:

这样就可以直接导入项目中的文件作为模块了。

但是有个问题:如果是使用命令行模式的话,就不会自动将当前的项目文件夹作为root source, 于是可以通过自己进入settings文件(因为settings是scrapy命令的主入口)中设置。

import sys
sys.path.insert(0, '项目所在目录') # 第一个参数为优先级

但是此种方式添加的是绝对路径,可以用一种更加灵活的方式处理此问题:

import os
import sys
base_dir=os.path.dirname(os.path.abspath(os.path.dirname(__file__)))
sys.path.insert(0, os.path.join(base_dir, '当前项目名称')) #将路径加入到python path当中。使其可以直接import

crawlspdier

一些函数:

rules

爬取的规则属性,包含一个或多个Rule对象的列表,每个Rule都对爬取网站的动作做了定义,Criwlspider将读取rules每一个Rule并进行解析

parse_start_url(),是一个可重写的方法,当start_urls里面对应的Request返回Response时,该方法被调用,它会分析Response并返回item或者Request对象。

Rule 定义:

def __init__(self, allow=(), deny=(), allow_domains=(), deny_domains=(), restrict_xpaths=(),
tags=('a', 'area'), attrs=('href',), canonicalize=False,
unique=True, process_value=None, deny_extensions=None, restrict_css=(),
strip=True):

allow 是一个正则表达式列表,定义从当前页面提取符合匹配的链接。deny相反,allow_domains定义了域名,只有符合该域名的才跟进。deny_domains相反,restrict_xpath和restrict_xpath表示限定allow查找的区域。tags=('a', 'area')表示从哪些标签中找链接。attrs=('href'),从标签中找什么属性的链接。callback:回调函数,每次提取到连接时候,调用该函数,注意要避免使用parse作为回调函数。因为Crawlspider使用的parse()方法来实现其逻辑的,如果覆盖了parse()方法,Crawlspider将运行失败。

ca_kwargs:字典,包含传递给回调函数的参数。

follow:指定提取的链接是否需要跟进。如果callback参数为None,则follow默认为Ture,否则默认为False

process_links:指定的处理函数,从Llink_extract中获取到连接时候,被调用,主要用于判别链接和过滤。

process_reuquest:指定处理函数,跟进该Rule提取到的每个Ruquest时,该函数被调用,对Request进行处理,返回Request或者None

关于 itemloader

item loader 中的 rom  scrapy.loader.processors import TakeFirst

TakeFirst()的用法为从列表中间取出第一个非空值,注意不是第一个值,而是非空值。

Compose

用给定多个函数组合构成processor,每个输入值传入到一个函数,在输出到第二个函数,类推,

Mapcompose

与compose类似,迭代处理一个列表值中的所有元素,遍历然后依次处理。

SelectJmes

用于查询json中的元素,传入key,返回value。不过需要先安装jmespath包

安装之后就可以使用这个processor了。

实例如下:

from scrapy.loader.processors import SelectJmes
processor = SelectJmes('foo')
print(processor({'foo':'bar'}))
 运行结果: bar

scrapy Crawl_spider的更多相关文章

  1. 使用 Scrapy 构建一个网络爬虫

    来自weixin 记得n年前项目需要一个灵活的爬虫工具,就组织了一个小团队用Java实现了一个爬虫框架,可以根据目标网站的结构.地址和需要的内容,做简单的配置开发,即可实现特定网站的爬虫功能.因为要考 ...

  2. 使用Scrapy构建一个网络爬虫

    记得n年前项目需要一个灵活的爬虫工具,就组织了一个小团队用Java实现了一个爬虫框架,可以根据目标网站的结构.地址和需要的内容,做简单的配置开发,即可实现特定网站的爬虫功能.因为要考虑到各种特殊情形, ...

  3. Scrapy学习-23-分布式爬虫

    scrapy-redis分布式爬虫 分布式需要解决的问题 request队列集中管理 去重集中管理 存储管理   使用scrapy-redis实现分布式爬虫 github开源项目: https://g ...

  4. 【Scrapy笔记】使用方法

    安装: 1.pip install wheel 安装wheel 2.安装Twisted a.访问 http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted ...

  5. Scrapy框架爬虫初探——中关村在线手机参数数据爬取

    关于Scrapy如何安装部署的文章已经相当多了,但是网上实战的例子还不是很多,近来正好在学习该爬虫框架,就简单写了个Spider Demo来实践.作为硬件数码控,我选择了经常光顾的中关村在线的手机页面 ...

  6. scrapy爬虫docker部署

    spider_docker 接我上篇博客,为爬虫引用创建container,包括的模块:scrapy, mongo, celery, rabbitmq,连接https://github.com/Liu ...

  7. scrapy 知乎用户信息爬虫

    zhihu_spider 此项目的功能是爬取知乎用户信息以及人际拓扑关系,爬虫框架使用scrapy,数据存储使用mongo,下载这些数据感觉也没什么用,就当为大家学习scrapy提供一个例子吧.代码地 ...

  8. ubuntu 下安装scrapy

    1.把Scrapy签名的GPG密钥添加到APT的钥匙环中: sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 6272 ...

  9. 网络爬虫:使用Scrapy框架编写一个抓取书籍信息的爬虫服务

      上周学习了BeautifulSoup的基础知识并用它完成了一个网络爬虫( 使用Beautiful Soup编写一个爬虫 系列随笔汇总 ), BeautifulSoup是一个非常流行的Python网 ...

随机推荐

  1. Vue.js项目实战-多语种网站(租车)

    首先来看一下网站效果,想写这个项目的读者可以自行下载哦,地址:https://github.com/Stray-Kite/Car: 在这个项目中,我们主要是为了学习语种切换,也就是右上角的 中文/En ...

  2. 以一道ctf学习python脚本

    今天做了省赛初赛的ctf比赛,过程真是忐忑,奋战了6个小时(本来是三个小时的,哈哈哈哈). 不说了! 不说了! 说多了都是泪~ 看题吧,题目就是一道流量分析题,里面有一段icmp包,icmp包的ttl ...

  3. 结对编程-python实现

    目录 软件工程结对项目:Python实现wc程序 结对项目Github地址 项目成员 项目要求 说明 需求 PSP表格 解题思路描述 设计实现 代码组织图 代码分析 代码覆盖率 测试 单元测试 回归测 ...

  4. Centos7 安装chrony服务

    从Centos7 开始,新增了一条时间查询命令:timedatectl [root@c2 ~]# timedatectl Local -- :: CST Universal -- :: UTC RTC ...

  5. nacos 实现同机器上启动三个服务

    1.我们要在单台服务器上启动多个nacos实例,保证三个不同的端口,我们可以通过修改启动脚本: 打开启动脚本找到:export FUNCTION_MODE="all"    这一行 ...

  6. kali下ll命令无法使用

    重装了系统之后,使用ll命令竟然发现报错了. bash: ll:未找到命令   果断解决一波: vim ~/.bashrc   将alias ll=’ls -l‘前面的注释符号#删掉 运行   问题完 ...

  7. python27期day13:闭包、装饰器初始、标准版装饰器、作业题

    1.闭包: 保护数据安全.保护数据干净性. 2.闭包的定义:在嵌套函数内.使用非全局变量(且不使用本层变量) 将嵌套函数返回 闭包的目的:要接受被装饰的函数和被装饰函数需要的参数3.闭包举例子: de ...

  8. LG2852/BZOJ1717 「USACO2006DEC」Milk Patterns 离散化+后缀数组

    问题描述 LG2852 题解 字符串性质:字符串\(s\)的每个字串等于每个后缀的所有前缀 对输入的东西离散化,然后把数值看做\(\mathrm{ASCII}\)后缀排序 二分答案,二分长度. 显然一 ...

  9. AndroidStdio模拟器打不开报错 Guest isn't online after 7 seconds

    开了好几次模拟器,始终运行不出来原来的一个项目.报错如下: 解决方案: 经过百度,可能是Android Studio 3.0升级到3.0.1,启动原来建好的模拟器废掉了. 找到你软件中的 建议选择屏幕 ...

  10. Codechef Prime Distance On Tree

    [传送门] FFT第四题! 暑假的时候只会点分,然后合并是暴力合并的...水过去了... 其实两条路径长度的合并就是卷积的过程嘛,每次统计完路径就自卷积一下. 刚开始卷积固定了值域.T了.然后就不偷懒 ...