使用爬取http://quotes.toscrape.com/内容,网站内容很简单

一. 使用scrapy创建项目

scrapy startproject myscrapy1

scrapy genspider quotes

二. 修改items.py和quotes.py

items.py用来保存爬取的数据,和字典的使用方法一样

import scrapy

class Myscrapy1Item(scrapy.Item):
# define the fields for your item here like:
text = scrapy.Field()
author = scrapy.Field()
tags = scrapy.Field()

网页源文件中只需提取上面定义的3个字段

quotes.py

其中的parse函数负责解析start_urls返回的响应,提取数据以及进一步生成要处理的请求

# -*- coding: utf- -*-
import scrapy
from myscrapy1.items import Myscrapy1Item class QuotesSpider(scrapy.Spider):
name = 'quotes'
allowed_domains = ['quotes.toscrape.com']
start_urls = ['http://quotes.toscrape.com/'] def parse(self, response):
quotes = response.css('.quote')
for quote in quotes:
item = Myscrapy1Item() item['text'] = quote.css('.text::text').extract_first()
item['author'] = quote.css('.author::text').extract_first()
item['tags'] = quote.css('.tags .tag::text').extract()
yield item #获取多页内容
next = response.css('.pager .next a::attr("href")').extract_first()
url = response.url.join(next) #生成绝对URL
yield scrapy.Request(url=url, callback=self.parse) #构造请求时需要用scrapy.Request

二. 将数据保存到mongodb,以及把得到的数据限制显示50位,剩余的用省略号代替,这里需要设置settings.py和pipelines.py

settings.py

# -*- coding: utf- -*-

BOT_NAME = 'tutorial'

SPIDER_MODULES = ['tutorial.spiders']
NEWSPIDER_MODULE = 'tutorial.spiders' #让pipelines.py中的2个自定义类生效,序号越小优先级越高
ITEM_PIPELINES = {
'tutorial.pipelines.TextPipeline': ,
'tutorial.pipelines.MongoPipeline': ,
} MONGO_URI='localhost'
MONGO_DB='tutorial'

# Obey robots.txt rules
  ROBOTSTXT_OBEY = True

 

pipelines.py

# -*- coding: utf- -*-

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html # 文本太长,限制最长为50,后面用省略号代替 from scrapy.exceptions import DropItem
import pymongo class TextPipeline(object):
def __init__(self):
self.limit = def process_item(self, item, spider):
if item['text']:
if len(item['text']) > self.limit:
item['text'] = item['text'][:self.limit].rstrip() + '...'
return item
else:
return DropItem('Missing Text') #文本不存在,抛出异常MISSING TEXT # 保存到mongodb
class MongoPipeline(object): def __init__(self,mongo_uri, mongo_db):
self.mongo_uri = mongo_uri
self.mongo_db = mongo_db #从setting.py中拿到配置信息
@classmethod
def from_crawler(cls, crawler):
return cls(
mongo_uri=crawler.settings.get('MONGO_URI'),
mongo_db=crawler.settings.get('MONGO_DB')
) def open_spider(self, spider):
self.client = pymongo.MongoClient(self.mongo_uri)
self.db = self.client[self.mongo_db] def process_item(self, item, spider):
name = item.__class__.__name__ #其实值就是quotes
self.db[name].insert(dict(item))
return item def close_spider(self, spider):
self.client.close()

三. 常用的几个命令

.创建一个爬虫项目
scrapy startproject test1 . 生成一个爬虫文件
scrapy genspider baidu www.baidu.com
scrapy genspider -l :显示爬虫模板类型
例如:指定生成一个crawl 模板类型的爬虫文件
scrapy genspider -t crawl zhihu www.zhihu.com . 运行爬虫程序
scrapy crawl zhihu . 检查代码是否有错误
scrapy check . 返回项目中所有spider名称
scrapy list . 爬取内容保存到文件
scrapy crawl zhihu -o zhihu.json

scrapy入门例子的更多相关文章

  1. [转]Scrapy入门教程

    关键字:scrapy 入门教程 爬虫 Spider 作者:http://www.cnblogs.com/txw1958/ 出处:http://www.cnblogs.com/txw1958/archi ...

  2. Scrapy入门教程

    关键字:scrapy 入门教程 爬虫 Spider作者:http://www.cnblogs.com/txw1958/出处:http://www.cnblogs.com/txw1958/archive ...

  3. Scrapy入门教程(转)

    关键字:scrapy 入门教程 爬虫 Spider作者:http://www.cnblogs.com/txw1958/出处:http://www.cnblogs.com/txw1958/archive ...

  4. 小白学 Python 爬虫(35):爬虫框架 Scrapy 入门基础(三) Selector 选择器

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

  5. 【Bootstrap Demo】入门例子创建

    本文简单介绍下如何来使用 Bootstrap,通过引入 Bootstrap,来实现一个最基本的入门例子. 在前一篇博文[Bootstrap]1.初识Bootstrap 基础之上,我们完全可以更加方便快 ...

  6. 【Bootstrap】入门例子创建

    本文简单介绍下如何来使用 Bootstrap,通过引入 Bootstrap,来实现一个最基本的入门例子. 在前一篇博文[Bootstrap]1.初识Bootstrap 基础之上,我们完全可以更加方便快 ...

  7. spring boot入门例子

    最近学习spring boot,总结一下入门的的基础知识 1新建maven项目,修改pom.xml <project xmlns="http://maven.apache.org/PO ...

  8. MINA经典入门例子----Time Server

    原文地址 http://blog.sina.com.cn/s/blog_720bdf0501010b8r.html 貌似java的IO.NIO的入门例子都有相关的Time Server Demo.本例 ...

  9. 一个简单的iBatis入门例子

    一个简单的iBatis入门例子,用ORACLE和Java测试 目录结构: 1.导入iBatis和oracle驱动. 2.创建类Person.java package com.ibeats;import ...

随机推荐

  1. ora-01045错误的解决办法

    问题: 在用PL/SQL进行登录时,出现:”ora-01045 :user system lacks create session privilege; logon denied”. 原因:该用户没有 ...

  2. ajax传递数组及后台接收

    ajax传递的是{"items":arr},其中arr=[]; 在后台String[] items=req.getParameterValues("items" ...

  3. php防止会话固定攻击

    问题:希望确保应用不会受到会话固定攻击,即攻击者强制用户使用一个预定义的会话id. 解决方案:要求使用会话cookie但会话标识符不追加到URL,另外要频繁地生成新会话ID: <?php ini ...

  4. Qt的安装和使用中的常见问题(简略版)

    对于喜欢研究细节的朋友,可参考Qt的安装和使用中的常见问题(详细版). 目录 1.引入 2.Qt简介 3.Qt版本 3.1 查看安装的Qt版本 3.2 查看当前项目使用的Qt版本 3.3 查看当前项目 ...

  5. cnblog博客管理

    http://www.cnblogs.com/wc1903036673/                                        12436109 https://www.cnb ...

  6. [Selenium] Java代码获取屏幕分辨率

    import java.awt.Dimension; import java.awt.GraphicsEnvironment; import java.awt.Insets; import java. ...

  7. 如何用word文档在博客里发表文章

    目前大部分的博客作者在用Word写博客这件事情上都会遇到以下3个痛点: 1.所有博客平台关闭了文档发布接口,用户无法使用Word,Windows Live Writer等工具来发布博客.使用Word写 ...

  8. python 3安装PDFMiner3K

    首先确保,你的pyhton是python 3 可在https://www.python.org/downloads/处下载 打开cmd,键入pip3 install pdfminer3k

  9. POJ3281 Dining 2017-02-11 23:02 44人阅读 评论(0) 收藏

    Dining Description Cows are such finicky eaters. Each cow has a preference for certain foods and dri ...

  10. 企业搜索引擎开发之连接器connector(十九)

    连接器是基于http协议通过推模式(push)向数据接收服务端推送数据,即xmlfeed格式数据(xml格式),其发送数据接口命名为Pusher Pusher接口定义了与发送数据相关的方法 publi ...