命令行输入: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. 云顶之弈换中立python脚本

    import pynput keyboard = pynput.keyboard.Controller() mouse = pynput.mouse.Controller() def on_relea ...

  2. mpvue小程序开发之 实现一个弹幕评论

    先上图 就是一个简单的弹幕发送功能 弹幕区的页面: <div class="content" v-show="doommData.length"> ...

  3. MES系统如何帮助烟草行业管理生产流程

    与很多其他行业一样,烟草MES系统可以帮助卷烟企业实现智能生产.精益制造.快速实现烟草企业数字化车间的创建,助力企业实现改造升级,从而提升企业生产效率,降低生产成产.烟草行业得MES者得天下. 烟草行 ...

  4. bat脚本弹出消息示例(msg命令详细解释)

    弹出消息的bat,其实就是通过批处理调用msg命令,msg是系统自在的一个可以发送信息的命令. 示例: @echo off rem 测试MSG msg * "ok" rem 测试M ...

  5. 简单C语言程序

    #include<stdio.h> int main(void) { /* 计算两个时间的时间差 */ int hour1, minute1; int hour2, minute2; pr ...

  6. pdfium 之二

    https://www.foxitsoftware.cn/products/premium-pdfium/feature.php 基于谷歌PDFium开源代码 谷歌采用福昕的PDF技术为其PDF开源项 ...

  7. 201871010106-丁宣元 《面向对象程序设计(java)》第十五周学习总结

    201871010106-丁宣元 <面向对象程序设计(java)>第十五周学习总结 正文开头: 项目 内容 这个作业属于哪个课程 https://home.cnblogs.com/u/nw ...

  8. win7系统中右键新建没有写字板

    问题描述: win7系统中右键新建没有写字板 解决方案: 1. 按下Win+R后输入regedit打开注册表. (可以使用组合键ALT+ 键盘上的左键, 对展开的注册表项进行折叠方可查看) 2.定位到 ...

  9. docker 部署appium

    1.docker appium镜像和命令:https://github.com/appium/appium-docker-android 2.启动appium docker run --privile ...

  10. 旅游网dao层

    # 注册功能 # 1.根据用户名查询用户 select * from tab_user where username=#{username} # 2.插入注册用户信息 insert into tab_ ...