要爬取的网址是:http://quotes.toscrape.com/

磕磕绊绊的写完了

spiders

import scrapy
from kkk.items import * class QuoteSpider(scrapy.Spider):
name = 'quote'
allowed_domains = ['quotes.toscrape.com/']
start_urls = ['http://quotes.toscrape.com//'] def parse(self, response):
quotes = response.css('.quote')
for quote in quotes: #这是一个很好的方向,页面由重复的构造组成是,拿到大的框架组成的列表,然后循环,依次拿每个框架内的详细信息,yield。
item = QuoteItem() #
text = quote.css('span.text::text').extract_first()
author = quote.css('small.author::text').extract_first()
tags = quote.css('div.tags > a.tag::text').extract()
item['text'] = text
item['author'] = author
item['tags'] = tags
yield item
url = response.css('li.next > a::attr(href)').extract_first()
next_url = response.urljoin(url) # response.urljoin()
yield scrapy.Request(url=next_url,callback=self.parse) # yield Request对象

  Pipeline

  收获:

   1 这里都是类,完全可以定义__init__,完全可以把一些数据 添加到其静态属性。 

import pymongo
from scrapy.exceptions import DropItem class QuotePipeline1(object):
def __init__(self):
self.limit =
def process_item(self,item,spider):
if item:
if len(item['text'])>self.limit:
item['text'] = item['text'][:self.limit]+'...'
return item
else:
return DropItem('{}扔掉'.format(item)) class QuotePipeline2(object):
def __init__(self,uri,port,db):
self.uri = uri
self.port = port
self.db = db
@classmethod
def from_crawler(cls,crawler): # from_crawler(cls,crawler) 类方法,可以从settings中获取 值。
mongo_uri = crawler.settings.get('MONGO_URI')
mongo_port = crawler.settings.get('MONGO_PORT')
mongo_db = crawler.settings.get('MONGO_DB')
return cls(
mongo_uri,
mongo_port,
mongo_db,
)
def process_item(self,item,spider):
name = item.__class__.__name__ # __class__.__name__返回的是 这个数据的 类 的名成。即在items 中定义的 class QuoteItem():
self.db[name].insert(dict(item))
return item
def open_spider(self,spider):
self.client = pymongo.MongoClient(self.uri,self.port)
self.db = self.client[self.db]
def close_spider(self,spider):
self.client.close()

scrapy之小试身手的更多相关文章

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

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

  2. scrapy爬虫docker部署

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

  3. scrapy 知乎用户信息爬虫

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

  4. ubuntu 下安装scrapy

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

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

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

  6. Scrapy:为spider指定pipeline

    当一个Scrapy项目中有多个spider去爬取多个网站时,往往需要多个pipeline,这时就需要为每个spider指定其对应的pipeline. [通过程序来运行spider],可以通过修改配置s ...

  7. scrapy cookies:将cookies保存到文件以及从文件加载cookies

    我在使用scrapy模拟登录新浪微博时,想将登录成功后的cookies保存到本地,下次加载它实现直接登录,省去中间一系列的请求和POST等.关于如何从本次请求中获取并在下次请求中附带上cookies的 ...

  8. Scrapy开发指南

    一.Scrapy简介 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中. Scrapy基于事件驱动网络框架 Twis ...

  9. 利用scrapy和MongoDB来开发一个爬虫

    今天我们利用scrapy框架来抓取Stack Overflow里面最新的问题(),并且将这些问题保存到MongoDb当中,直接提供给客户进行查询. 安装 在进行今天的任务之前我们需要安装二个框架,分别 ...

随机推荐

  1. a survey for RL

    • A finite set of states St summarizing the information the agent senses from the environment at eve ...

  2. pysql用类进行封装

    pyMySQL用类进行封装 class SqlHelper(object): def __init__(self): self.connect() def connect(self): self.co ...

  3. c#和Java中的接口

    使用场景: 在c#和Java中: 1.接口可以实现“多继承”(多实现),一个类只能继承自一个父类,但是可以实现多个接口. 2.接口解决了不同类型之间的多态问题,比如鱼与船不是同一类型,但是都能在水里“ ...

  4. Java微信公众号开发----定时获取access_token并保存到redis中

    本人原本是想做微信公众号菜单的创建修改删除等操作的,但是发现需要access_token,通过阅读文档,发现文档要求有以下几点: 1.access_token 获取后有效期是2小时 2.access_ ...

  5. 数据结构算法与应用c++语言描述 原书第二版 答案(更新中

    目录 第一章 C++回顾 函数与参数 1.交换两个整数的不正确代码. 异常 10.抛出并捕捉整型异常. 第一章 C++回顾 函数与参数 1.交换两个整数的不正确代码. //test_1 void sw ...

  6. vector总结(更新中。。。)

    vector中这两个属性很容易弄混淆. size是当前vector容器真实占用的大小,也就是容器当前拥有多少个容器. capacity是指在发生realloc前能允许的最大元素数,即预分配的内存空间. ...

  7. 获得函数返回值类型、参数tuple、成员函数指针中的对象类型

    //function_traits.h,获得函数返回值类型.参数tuple.成员函数指针中的对象类型 //参考https://github.com/qicosmos/cosmos/blob/maste ...

  8. 【思维题 并查集 图论】bzoj1576: [Usaco2009 Jan]安全路经Travel

    有趣的思考题 Description Input * 第一行: 两个空格分开的数, N和M * 第2..M+1行: 三个空格分开的数a_i, b_i,和t_i Output * 第1..N-1行: 第 ...

  9. 一个4年工作经验的java程序员的困惑,怎样才能能为一个架构师,请教大神

    一个4年工作经验的java程序员的困惑,怎样才能能为一个架构师 LZ本人想往架构师发展, 业余时间也会看一些书籍, 但是感觉没有头绪, 有些书看了,也没有地方实践 我做了4年的java开发, 在一个公 ...

  10. 201621123080《Java程序设计》第12周学习总结

    201621123080<Java程序设计>第12周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 面向系统综合设计-图书馆管理系 ...