一 简介

  crawlspider 是Spider的一个子类,除了继承spider的功能特性外,还派生了自己更加强大的功能。

  LinkExtractors链接提取器,Rule规则解析器。

二 强大的链接提取器和规则解析器

1 LinkExtractor 链接提取器

    LinkExtractor(

         allow=r'Items/',# 满足括号中“正则表达式”的值会被提取,如果为空,则全部匹配。

         deny=xxx,  # 满足正则表达式的则不会被提取。

         restrict_xpaths=xxx, # 满足xpath表达式的值会被提取

         restrict_css=xxx, # 满足css表达式的值会被提取

         deny_domains=xxx, # 不会被提取的链接的domains。 

    )
作用:提取response中符合规则的链接

2 Rule:规则解析器

Rule(linkExtractor(allow=r'Items/'),callback='parse_item',follow=True)
-参数介绍
  参数1:制定链接提取器
  参数2:制定规则解析器解析数据的规则(回调函数)
  参数3:是否允许链接提取器继续作用到已经提取到的链接网页上提取新的链接,
     默认是True,即继续提取。

3 rules=()

制定不同的规则的解析器。一个Rule,一种提取规则。

三 CrawlSpider整体流程

  1. 爬取文件首先根据起始url,获取改url的网页内容;
  2. 链接提取器会根据指定提取规则将步骤1中网页内容中的链接进行提取;
  3. 规则解析器回根据指定解析规则将链接中的网页内容根据制定规则进行解析;
  4. 将解析数据封装到item中,然后提交给管道进行持久化存储。

四 实战抽屉全站爬取

  • 1 创建项目
scrapy start project ChouTi
  • 2 创建爬虫文件
cd Chouti

scrapy genspider -t crawl choti chouti.com
  • 3 爬虫文件 chouti.py
# -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from ChouTi.items import ChoutiItem
#LinkExtractor:链接提取器
#Rule:规则解析器 class ChoutiSpider(CrawlSpider):
name = 'chouti'
# allowed_domains = ['xxx.com']
start_urls = ['https://dig.chouti.com/r/scoff/hot/1'] link=LinkExtractor(allow=r'/r/scoff/hot/\d+')
rules = (
Rule(link, callback='parse_item', follow=True),
) def parse_item(self, response):
# print(response)
div_list=response.xpath('//div[@id="content-list"]/div')
for div in div_list:
content=div.xpath('.//div[@class="news-content"]/div[1]/a[1]/text()').extract_first().strip()
author=div.xpath('.//div[@class="part2"]/a[4]//text()').extract_first()
author="".join(author)
item=ChoutiItem()
item['author']=author
item['content']=content
yield item
注意:

多链接解析器书写方式;

class ChoutiSpider(CrawlSpider):
name = 'chouti'
# allowed_domains = ['xxx.com']
start_urls = ['https://dig.chouti.com/r/scoff/hot/1'] link=LinkExtractor(allow=r'/r/scoff/hot/\d+')
link2=LinkExtractor(allow='^/text/$') #增加特定页面提取规则
rules = (
Rule(link, callback='parse_item', follow=True),
Rule(link2, callback='parse_item', follow=True),#允许添加多个规则
)

4 items.py

import scrapy

class ChoutiItem(scrapy.Item):
# define the fields for your item here like:
content = scrapy.Field()
author = scrapy.Field()

5 pipelines.py

import pymongo

class ChoutiPipeline(object):
conn=None def open_spider(self,spider):
self.conn=pymongo.MongoClient(host='127.0.0.1',port=27017)
def process_item(self, item, spider):
# print(item)
self.conn.spider.chouti.insert(item.__dict__)
return item

6 settings.py

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

ROBOTSTXT_OBEY = False

ITEM_PIPELINES = {
'ChouTi.pipelines.ChoutiPipeline': 300,
}

爬虫系列---scrapy全栈数据爬取框架(Crawlspider)的更多相关文章

  1. 基于CrawlSpider全栈数据爬取

    CrawlSpider就是爬虫类Spider的一个子类 使用流程 创建一个基于CrawlSpider的一个爬虫文件 :scrapy genspider -t crawl spider_name www ...

  2. 爬虫系列4:Requests+Xpath 爬取动态数据

    爬虫系列4:Requests+Xpath 爬取动态数据 [抓取]:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html [分页]:参 ...

  3. scrapy爬虫系列之二--翻页爬取及日志的基本用法

    功能点:如何翻页爬取信息,如何发送请求,日志的简单实用 爬取网站:腾讯社会招聘网 完整代码:https://files.cnblogs.com/files/bookwed/tencent.zip 主要 ...

  4. Java爬虫系列四:使用selenium-java爬取js异步请求的数据

    在之前的系列文章中介绍了如何使用httpclient抓取页面html以及如何用jsoup分析html源文件内容得到我们想要的数据,但是有时候通过这两种方式不能正常抓取到我们想要的数据,比如看如下例子. ...

  5. 爬虫系列1:Requests+Xpath 爬取豆瓣电影TOP

    爬虫1:Requests+Xpath 爬取豆瓣电影TOP [抓取]:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html [分页]: ...

  6. 爬虫系列3:Requests+Xpath 爬取租房网站信息并保存本地

    数据保存本地 [抓取]:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html [分页]:参考前文 爬虫系列2:https://www ...

  7. 爬虫系列(1)-----python爬取猫眼电影top100榜

    对于Python初学者来说,爬虫技能是应该是最好入门,也是最能够有让自己有成就感的,今天在整理代码时,整理了一下之前自己学习爬虫的一些代码,今天先上一个简单的例子,手把手教你入门Python爬虫,爬取 ...

  8. 爬虫系列2:Requests+Xpath 爬取租房网站信息

    Requests+Xpath 爬取租房网站信息 [抓取]:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html [分页]:参考前文 ...

  9. Python进行拉勾网数据爬取框架与思路

    爬取内容 用交互式的方式输入想查询的职位并循环输出职位简要信息,为了方便阅读,本文使用到的变量并不是以目标变量的英文来命名,而是为了方便而取的变量名,各位大牛请谅解.(因贵网站爬取一定量数据后需要登陆 ...

随机推荐

  1. 学习-xlsxwriter模块

    Xlsx是python用来构造xlsx文件的模块,可以向excel2007+中写text,numbers,formulas 公式以及hyperlinks超链接. 可以完成xlsx文件的自动化构造,包括 ...

  2. Nginx学习系列四默认负载均衡轮询及Ip_hash等常用指令介绍

    一.简介 Upstream模块是Nginx中一个核心模块,当客户端访问Nginx服务器的时候,Nginx会从服务器列表中选取压力小的服务器,然后分配给客户端进行访问.这个过程,Nginx通过轮询算法轮 ...

  3. NodeJs安装步骤与淘宝镜像

    dir 列目录 lscd 路径 切换路径 cdmd 文件夹名 创建一个空文件夹 mdC: 切换盘符 cls 清屏 clear ping ip/网址 网络测试ipconfig -all 查看网络连接信息 ...

  4. 『2019/4/8 TGDay1模拟赛 反思与总结』

    2019/4/8 TGDay1模拟赛 这次是和高一的学长学姐们一起参加的\(TG\)模拟考,虽然说是\(Day1\),但是难度还是很大的,感觉比\(18\)年的\(Day1\)难多了. 还是看一下试题 ...

  5. JDK1.8源码(二)——java.util.LinkedList

      LinkedList定义 LinkedList 是链表实现的线性表(双链表),元素有序且可以重复. public class LinkedList<E> extends Abstrac ...

  6. 深入理解.NET Core的基元: deps.json, runtimeconfig.json, dll文件

    原文链接: Deep-dive into .NET Core primitives: deps.json, runtimeconfig.json, and dll's 作者: Nate McMaste ...

  7. C++版- Leetcode 3. Longest Substring Without Repeating Characters解题报告

    Leetcode 3. Longest Substring Without Repeating Characters 提交网址: https://leetcode.com/problems/longe ...

  8. 可视化面板LogDashboard使用log4net源

    logdashboard现已支持log4net文件源,本示例源码在 https://github.com/liangshiw/LogDashboard/tree/master/samples/UseL ...

  9. 技术分享:RxJS实战练习-经典游戏Breakout

    效果图 数据流分析 1.ticker$ 数据流 interval配合scheduler/animationFrame 作为游戏随时间变化的控制数据流 ticker$ = interval(this.T ...

  10. HBase2实战:HBase Flink和Kafka整合

    1.概述 Apache官方发布HBase2已经有一段时间了,HBase2中包含了许多个Features,从官方JIRA来看,大约有4500+个ISSUES(查看地址),从版本上来看是一个非常大的版本了 ...