scrapy入门例子
使用爬取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入门例子的更多相关文章
- [转]Scrapy入门教程
关键字:scrapy 入门教程 爬虫 Spider 作者:http://www.cnblogs.com/txw1958/ 出处:http://www.cnblogs.com/txw1958/archi ...
- Scrapy入门教程
关键字:scrapy 入门教程 爬虫 Spider作者:http://www.cnblogs.com/txw1958/出处:http://www.cnblogs.com/txw1958/archive ...
- Scrapy入门教程(转)
关键字:scrapy 入门教程 爬虫 Spider作者:http://www.cnblogs.com/txw1958/出处:http://www.cnblogs.com/txw1958/archive ...
- 小白学 Python 爬虫(35):爬虫框架 Scrapy 入门基础(三) Selector 选择器
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...
- 【Bootstrap Demo】入门例子创建
本文简单介绍下如何来使用 Bootstrap,通过引入 Bootstrap,来实现一个最基本的入门例子. 在前一篇博文[Bootstrap]1.初识Bootstrap 基础之上,我们完全可以更加方便快 ...
- 【Bootstrap】入门例子创建
本文简单介绍下如何来使用 Bootstrap,通过引入 Bootstrap,来实现一个最基本的入门例子. 在前一篇博文[Bootstrap]1.初识Bootstrap 基础之上,我们完全可以更加方便快 ...
- spring boot入门例子
最近学习spring boot,总结一下入门的的基础知识 1新建maven项目,修改pom.xml <project xmlns="http://maven.apache.org/PO ...
- MINA经典入门例子----Time Server
原文地址 http://blog.sina.com.cn/s/blog_720bdf0501010b8r.html 貌似java的IO.NIO的入门例子都有相关的Time Server Demo.本例 ...
- 一个简单的iBatis入门例子
一个简单的iBatis入门例子,用ORACLE和Java测试 目录结构: 1.导入iBatis和oracle驱动. 2.创建类Person.java package com.ibeats;import ...
随机推荐
- jsp生成好看的验证码
这是一个Servlet,名字是ImageServlet package a; import java.awt.Color; import java.awt.Font; import java.awt. ...
- 系统批量运维管理器paramiko详解
一.paramiko介绍 paramiko是基于Python实现的SSH2远程安全连接,支持认证及密钥方式.可以实现远程命令执行.文件传输.中间SSH代理等功能,相对于Pexpect,封装的层次更高, ...
- Common issue on financial information exchange (FIX) Connectivity[z]
FIX Protocol Session Connectivity Hi guys, in this post I would like share my experience with financ ...
- MongoDB增加用户认证: 增加用户、删除用户、修改用户密码、读写权限、只读权限
1.添加并验证用户 > use admin> db.addUser("zjx","tsjianxin") #添加用户 > db.auth(&q ...
- Scheduling the Delivery of Local Notifications
[Scheduling the Delivery of Local Notifications] Apps can use local notifications to display alerts, ...
- swipe.js 使用方法
1.插件要求的css样式: <style> .swipe { overflow: hidden; visibility: hidden; position: relative; } .sw ...
- Linux 基础教程 41-系统关机和重启
在Linux系统中,仅仅是关机和重启相关的命令就至少有5个,shutdown. halt.poweroff.reboot.init.各个命令作用如下所示: 命令 说明 shutdown 可用于 ...
- Linux 基础教程 39-作业控制
在Linux系统中,作业是由一个或多个关联进程组成的.用户可以运行多个作业并可以在作业间切换.而作业控制则是对作业的行为进行控制,允许用户对作业的前后台的进行切换和终止操作等.作业相关的控制命 ...
- Git config 配置文件
一.Git已经在你的系统中了,你会做一些事情来客户化你的Git环境.你只需要做这些设置一次:即使你升级了,他们也会绑定到你的环境中.你也可以在任何时刻通过运行命令来重新更改这些设置. Git有一个工具 ...
- Vivado安装教程
Vivado的各个版本的安流程其实都差不多,本教程用Vivado2016.4为例进行安装,同样适用于之前和之后的各个版本. 下载好安装包后打开,双击xsetup.exe运行安装程序 弹出的窗口,提示现 ...