Scrapy(五):CrawlSpider的使用

说明 :CrawlSpider,就是一个类,是Spider的一个子类,也是一个官方类,因为是子类,所以功能更加的强大,多了一项功能:去指定的页面中来抓取指定的url的功能

比如:很多页码,都需要自己去查找规律,然后写代码实现其它页面的爬取,学完crawlspider之后,可以让它直接提取符合要求的页码url,将这些url扔给调度器即可

链接提取器,在scrapy中就是一个类,LinkExtractor

一、创建项目:

scrapy startproject qiubaiproject

二、创建CrawlSpider爬虫文件

scrapy genspider -t crawl qiu 'www.qiushibaike.com'

三、书写spider文件

# -*- coding: utf-8 -*-

"""
field: qiu.py
"""
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from qiubaiproject.items import QiubaiprojectItem class QiuSpider(CrawlSpider): name = 'qiu'
allowed_domains = ['www.qiushibaike.com']
start_urls = ['http://www.qiushibaike.com/'] # 【注】如果使用crawlspider,parse方法不能重写,因为内部实现了很重要的功能 page_link = LinkExtractor(allow=r'/8hr/page/\d+/') """
在创建对象的时候,需要使用到一些规则,符合规则的都会提取出来
scrapy.linkextractors.LinkExtractor(
allow = (), # 正则表达式
deny = (), # 正则表达式(不经常使用)
allow_domains = (), # 域名,在域名下的提取出来(不经常使用)
deny_domains = (), # 在这些下面的不要提取(不经常使用)
restrict_xpaths = (), # 根据xpath路径来提取符合要求的链接
restrict_css = () # 根据选择器来提取
callback: 定制处理响应的回调函数, 注意callback的写法,和普通spider的写法不一样,普通 callback=self.parse
crawl: callback='parse_item'
follow: 是否跟进,提取了这些链接,这些链接获得响应之后,在响应里面要不要接着提取链接发送请求,如果要,follow=True 如果不要,follow=False
follow是有默认值的,如果有callback,默认为False,如果没有callback,默认为True
) """
rules = (
Rule(page_link, callback='parse_item', follow=True),
) def parse_item(self, response):
# 先找到所有的div
div_list = response.xpath('//div[@id="content-left"]/div')
# 遍历这个div的列表,依次获取里面的每一条信息
for odiv in div_list:
# 创建对象
item = QiubaiprojectItem()
# 用户头像
face = 'https:' + odiv.xpath('.//div[1]//img/@src')[0].extract()
# 用户的名字
name = odiv.xpath('.//div[1]//h2').extract()[0]
# 用户的年龄
age = odiv.xpath('.//div[starts-with(@class,"articleGender")]').extract_first()
# 获取用户内容
ospan = odiv.xpath('.//div[@class="content"]/span[1]')[0]
content = ospan.xpath('string(.)').extract()
# 用户的好笑个数
haha_count = odiv.xpath('.//div[@class="stats"]/span[@class="stats-vote"]/i/text()').extract()[0]
# 获取评论个数
ping_count = odiv.xpath('.//div[@class="stats"]/span[@class="stats-comments"]//i/text()').extract()[0] # 将提取的信息保存起来
item['image_src'] = face
item['name'] = name
item['age'] = age
item['content'] = content
item['haha_count'] = haha_count
item['ping_count'] = ping_count yield item

四、书写item.py文件

# -*- coding: utf-8 -*-

# Define here the models for your scraped items
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.html import scrapy class QiubaiprojectItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
# 图片链接
image_src = scrapy.Field()
# 用户名
name = scrapy.Field()
# 年龄
age = scrapy.Field()
# 内容
content = scrapy.Field()
# 好笑个数
haha_count = scrapy.Field()
# 评论个数
ping_count = scrapy.Field()

五、书写管道文件

# -*- coding: utf-8 -*-

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html
import json class QiubaiprojectPipeline(object):
# 爬虫启动的时候只会调用一次
def open_spider(self, spider):
# 将文件的打开写道这里
self.fp = open('qiubai.json', 'w', encoding='utf8') # 这个函数就是处理item的函数,每一个item过来都会回调这个方法
def process_item(self, item, spider):
# 将对象转化为字典
obj = dict(item)
# 将字典转化为json格式字符串
string = json.dumps(obj, ensure_ascii=False)
self.fp.write(string + '\n')
return item # 爬虫结束的时候回调这个方法
def close_spider(self, spider):
self.fp.close()

六、修改setting文件

ROBOTSTXT_OBEY = True

DOWNLOAD_DELAY = 4   #防止爬取过快丢失数据

DEFAULT_REQUEST_HEADERS = {
"User-Agent" : "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;",
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
} ITEM_PIPELINES = {
'tencent.pipelines.TencentPipeline': 300,
}

七、运行爬虫程序

scrapy crawl qiu

Scrapy(五):CrawlSpider的使用的更多相关文章

  1. python爬虫之Scrapy框架(CrawlSpider)

    提问:如果想要通过爬虫程序去爬取”糗百“全站数据新闻数据的话,有几种实现方法? 方法一:基于Scrapy框架中的Spider的递归爬去进行实现的(Request模块回调) 方法二:基于CrawlSpi ...

  2. scrapy——3 crawlSpider——爱问

    scrapy——3  crawlSpider crawlSpider 爬取一般网站常用的爬虫类.其定义了一些规则(rule)来提供跟进link的方便的机制. 也许该spider并不是完全适合您的特定网 ...

  3. python框架Scrapy中crawlSpider的使用——爬取内容写进MySQL

    一.先在MySQL中创建test数据库,和相应的site数据表 二.创建Scrapy工程 #scrapy startproject 工程名 scrapy startproject demo4 三.进入 ...

  4. python框架Scrapy中crawlSpider的使用

    一.创建Scrapy工程 #scrapy startproject 工程名 scrapy startproject demo3 二.进入工程目录,根据爬虫模板生成爬虫文件 #scrapy genspi ...

  5. Scrapy框架-CrawlSpider

    目录 1.CrawlSpider介绍 2.CrawlSpider源代码 3. LinkExtractors:提取Response中的链接 4. Rules 5.重写Tencent爬虫 6. Spide ...

  6. scrapy 中crawlspider 爬虫

    爬取目标网站: http://www.chinanews.com/rss/rss_2.html 获取url后进入另一个页面进行数据提取 检查网页: 爬虫该页数据的逻辑: Crawlspider爬虫类: ...

  7. Scrapy 框架 CrawlSpider 全站数据爬取

    CrawlSpider 全站数据爬取 创建 crawlSpider 爬虫文件 scrapy genspider -t crawl chouti www.xxx.com import scrapy fr ...

  8. Scrapy 使用CrawlSpider整站抓取文章内容实现

    刚接触Scrapy框架,不是很熟悉,之前用webdriver+selenium实现过头条的抓取,但是感觉对于整站抓取,之前的这种用无GUI的浏览器方式,效率不够高,所以尝试用CrawlSpider来实 ...

  9. 全栈爬取-Scrapy框架(CrawlSpider)

    引入 提问:如果想要通过爬虫程序去爬取”糗百“全站数据新闻数据的话,有几种实现方法? 方法一:基于Scrapy框架中的Spider的递归爬取进行实现(Request模块递归回调parse方法). 方法 ...

  10. Scrapy框架——CrawlSpider类爬虫案例

    Scrapy--CrawlSpider Scrapy框架中分两类爬虫,Spider类和CrawlSpider类. 此案例采用的是CrawlSpider类实现爬虫. 它是Spider的派生类,Spide ...

随机推荐

  1. PyQt5 对话框示例

    import sys from PyQt5.QtWidgets import * from PyQt5.QtGui import * class Example(QMainWindow): def _ ...

  2. CSS3如何实现div闪烁效果

    效果: Html: <h1 class="blink">花花世界</h1> Css: @keyframes fade { from { opacity: 1 ...

  3. 分享一个我自己做的 Excel 万年历

    下载链接在此. 纯 Excel 公式实现,带农历,可自定义节日.配色. 带有紧凑日历和记事日历两种日历,均可直接 Ctrl+P 打印,且打印时不带有顶部的控制栏.

  4. 使用matlab进行图像处理的一些常用操作和tip

    本人还是习惯使用Python语言,有时候不得不使用matlab的时候就变得举步维艰,下面记录一下使用matlab进行图像处理的一些常用操作以及代码,方便之后查阅: 1. 图像的读取 %% 读取原图像 ...

  5. TCP和UDP的Socket编程实验

    Linux Socket 函数库是从 Berkeley 大学开发的 BSD UNIX 系统中移植过来的.BSD Socket 接口是在众多 Unix 系统中被广泛支持的 TCP/IP 通信接口,Lin ...

  6. 十六进制颜色码及其表示-(6 digit color code)

    我们知道对于RGB颜色系统,颜色是由三个256位的十进制数值表示的: (R:0-255,G:0-255,B:0-255) 那么一个三元组可以确定一种颜色. 然而,在很多配置文件中颜色并不是直接用十进制 ...

  7. Mac下安装octave

    1.首先安装Command Line Tool xcode-select --install2.Mac OSX平台下,用神器Homebrew安装 curl -LsSf http://github.co ...

  8. 科学计算:Python 分析数据找问题,并图形化

    对于记录的数据,如何用 Python 进行分析.或图形化呢? 本文将介绍 numpy, matplotlib, pandas, scipy 几个包,进行数据分析.与图形化. 准备环境 Python 环 ...

  9. [置顶] linux中fork()函数详解(原创!!实例讲解)

    分类: 计算机系统 linux2010-06-01 23:35 60721人阅读 评论(105) 收藏 举报 linux2010存储  一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源 ...

  10. 磨皮美颜算法 附完整C代码

    前言 2017年底时候写了这篇<集 降噪 美颜 虚化 增强 为一体的极速图像润色算法 附Demo程序> 这也算是学习过程中比较有成就感的一个算法. 自2015年做算法开始到今天,还有个把月 ...