CrawlSpider

作用:用于进行全站数据爬取

CrawlSpider就是Spider的一个子类

如何新建一个基于CrawlSpider的爬虫文件

scrapy genspider -t crawl xxx www.xxx.com

例:choutiPro

LinkExtractor连接提取器:根据指定规则(正则)进行连接的提取

Rule规则解析器:将连接提取器提取到的连接进行请求发送,然后对获取的页面进行指定规则【callback】的解析

一个链接提取器对应唯一一个规则解析器

例:crawlspider深度(全栈)爬取【sunlinecrawl例】

分布式(通常用不到,爬取数据量级巨大、时间少时用分布式)

概念:可将一组程序执行在多态机器上(分布式机群),使其进行数据的分布爬取

原生的scrapy框架是否可以实现分布式?

不能

抽屉

# spider文件

import scrapy

from scrapy.linkextractors import LinkExtractor

from scrapy.spiders import CrawlSpider, Rule

class ChoutiSpider(CrawlSpider):

name = 'chouti'

# allowed_domains = ['www.xxx.com']

start_urls = ['https://dig.chouti.com/1']

# 连接提取器:从起始url对应的页面中提取符合规则的所有连接;allow=正则表达式

# 正则为空的话,提取页面中所有连接

link = LinkExtractor(allow=r'\d+')

rules = (

# 规则解析器:将连接提取器提取到的连接对应的页面源码进行指定规则的解析

# Rule自动发送对应链接的请求

Rule(link, callback='parse_item', follow=True),

# follow:True 将连接提取器 继续 作用到 连接提取器提取出来的连接 对应的页面源码中

)

def parse_item(self, response):

item = {}

#item['domain_id'] = response.xpath('//input[@id="sid"]/@value').get()

#item['name'] = response.xpath('//div[@id="name"]').get()

#item['description'] = response.xpath('//div[@id="description"]').get()

return item

阳光热线网

# 1.spider文件

import scrapy

from scrapy.linkextractors import LinkExtractor

from scrapy.spiders import CrawlSpider, Rule

from sunLineCrawl.items import SunlinecrawlItem,ContentItem

class SunSpider(CrawlSpider):

name = 'sun'

# allowed_domains = ['www.xxx.com']

start_urls = ['http://wz.sun0769.com/index.php/question/questionType?type=4&page=']

link = LinkExtractor(allow=r'type=4&page=\d+') # 提取页码连接

link1 = LinkExtractor(allow=r'question/2019\d+/\d+\.shtml') # 提取详情页连接

rules = (

Rule(link, callback='parse_item', follow=False),

Rule(link1, callback='parse_detail'),

)

# 解析出标题和网友名称数据

def parse_item(self, response):

tr_list = response.xpath('//*[@id="morelist"]/div/table[2]//tr/td/table//tr')

for tr in tr_list:

title = tr.xpath('./td[2]/a[2]/text()').extract_first()

net_friend = tr.xpath('./td[4]/text()').extract_first()

item = SunlinecrawlItem()

item['title'] = title

item['net_friend'] = net_friend

yield item

# 解析出新闻的内容

def parse_detail(self,response):

content = response.xpath('/html/body/div[9]/table[2]//tr[1]/td/div[2]//text()').extract()

content = ''.join(content)

item = ContentItem()

item['content'] = content

yield item

--------------------------------------------------------------------------------

# 2.items文件

import scrapy

class SunlinecrawlItem(scrapy.Item):

title = scrapy.Field()

net_friend = scrapy.Field()

class ContentItem(scrapy.Item):

content = scrapy.Field()

--------------------------------------------------------------------------------

# 3.pipelines文件

class SunlinecrawlPipeline(object):

def process_item(self, item, spider):

# 确定接受到的item是什么类型(Content/Sunlinecrawl)

if item.__class__.__name__ == 'SunlinecrawlItem':

print(item['title'],item['net_friend'])

else:

print(item['content'])

return item

--------------------------------------------------------------------------------

# 4.setting文件

BOT_NAME = 'sunLineCrawl'

SPIDER_MODULES = ['sunLineCrawl.spiders']

NEWSPIDER_MODULE = 'sunLineCrawl.spiders'

LOG_LEVEL = 'ERROR'

USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'

ROBOTSTXT_OBEY = False

ITEM_PIPELINES = {

'sunLineCrawl.pipelines.SunlinecrawlPipeline': 300,

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

python中spider的用法_python网络爬虫 CrawlSpider使用详解相关推荐

  1. python中的sep参数_Python sep参数使用方法详解

    Python sep参数使用方法详解 这篇文章主要介绍了Python sep参数使用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Pyth ...

  2. python中flush什么意思_python flush()定义及作用详解(实例分析)

    今天这篇文章我们来了解一下python之中的flush,在进入文章之前我们首先要知道我们要学的是什么东西,今天讲的是pythonflush,了解什么是flush,并且知道flash什么意思.这些东西我 ...

  3. python 读取图片转换为一维向量_对Python中一维向量和一维向量转置相乘的方法详解...

    对Python中一维向量和一维向量转置相乘的方法详解 在Python中有时会碰到需要一个一维列向量(n*1)与另一个一维列向量(n*1)的转置(1*n)相乘,得到一个n*n的矩阵的情况.但是在pyth ...

  4. python什么意思k_对python中的*args与**kwgs的含义与作用详解

    对python中的*args与**kwgs的含义与作用详解 在定义函数的时候参数通常会使用 *args与**kwgs,形参与实参的区别不再赘述,我们来解释一下这两个的作用. *args是非关键字参数, ...

  5. python2.7除法_对python中的float除法和整除法的实例详解

    从python2.2开始,便有两种除法运算符:"/"."//".两者最大区别在: python2.2前的版本和python2.2以后3.0以前的版本的默认情况下 ...

  6. python中怎么计数_浅谈python中统计计数的几种方法和Counter详解

    1) 使用字典dict() 循环遍历出一个可迭代对象中的元素,如果字典没有该元素,那么就让该元素作为字典的键,并将该键赋值为1,如果存在就将该元素对应的值加1. lists = ['a','a','b ...

  7. python实现单例模式的几种方式_基于Python中单例模式的几种实现方式及优化详解...

    单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. ...

  8. Python中常见的__init__.py是什么意思?详解Python import的方式和原理

    Python中常见的__init__.py是什么意思?详解Python import的方式和原理 1 什么是模块化编程? 2 __init__.py文件的作用 3 Python如何import第三方库 ...

  9. args在python中什么意思_对python中的*args与**kwgs的含义与作用详解

    在定义函数的时候参数通常会使用 *args与**kwgs,形参与实参的区别不再赘述,我们来解释一下这两个的作用. *args是非关键字参数,用于元组,**kw是关键字参数 例如下面的代码 def fo ...

最新文章

  1. RocketMQ高性能之底层存储设计
  2. 成功解决ValueError: With n_samples=0, test_size=0.3 and train_size=None, the resulting train set will be
  3. GetWindowRect() 和 GetClientRect() 的区别
  4. 如何在IE右键菜单中添加自定义项
  5. Django与jQuery通信;Django前后端传值
  6. mysql集群之keepalived简单搭建
  7. “System.Data.SqlClient.SqlException: A transport-level error has occurred when receiving results fro
  8. JavaScript中的ParseInt(08)和“09”返回0的原因分析及解决办法
  9. linux 串口是否可写,串口编程可写入不能读取 怎么解决
  10. linux内核配置usb虚拟串口,霍尼韦尔是否能提供USB串口仿真的Linux驱动程序?
  11. 记录一个可以word,xls,PDF互转思维导图的工具
  12. linux管理员下安装网易云,在Ubuntu 18.10系统中安装网易云音乐的方法
  13. visio付款流程图_visio画程序流程图(转)
  14. 【网站集合】【Windows】程序员常用网站一览
  15. 动态规划算法实现0/1背包问题
  16. 「真香系列」新物种首发亮相 聚划算爆款孵化玩法升级
  17. Qt的QBuffer
  18. 电商网络支付结算风险与防范
  19. SAP PP 笔记(一) 概述
  20. 全面解析5种常见悬挂——连杆支柱悬挂

热门文章

  1. CSE 110: Principles of Programming Languages
  2. XML入门经典(第4版)pdf
  3. 项目展示-新浪微博客户端
  4. 模电之半导体基础篇3(半导体二极管、二极管应用)
  5. 露出暴露自拍论坛_如何照出高质感的自拍?——18个技巧,值得收藏
  6. Node.js下载安装及各种npm、cnpm、nvm、nrm配置(保姆式教程—提供全套安装包)—cnpm的安装与配置(3)
  7. mysql表级锁和行级锁_MySQL表级锁和行级锁
  8. 深度系统安装移动硬盘启动_深度系统如何安装_电脑知识
  9. 使用Python实现电子邮件群发功能
  10. 使用Jupyter Notebook+bokeh绘图入门完整步骤