scrapy文档

一:安装scrapy

a. pip3 install wheel

b. 下载twisted http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted

c. 进入下载目录,执行 pip3 install Twisted‑17.1.0‑cp35‑cp35m‑win_amd64.whl

d. pip3 install scrapy

e. 下载并安装pywin32:https://sourceforge.net/projects/pywin32/files/

二:基本操作

(1)新建工程:在创建工程之前先进入想用来保存代码的目录,然后执行

scrapy startproject xxx #创建项目

Microsoft Windows [版本 10.0.16299.309]
(c) Microsoft Corporation。保留所有权利。 C:\Users\felix>cd C:\Users\felix\PycharmProjects\scrapy_quotes C:\Users\felix\PycharmProjects\scrapy_quotes>scrapy startproject quotes
New Scrapy project 'quotes', using template directory 'c:\\users\\felix\\appdata\\local\\programs\\python\\python36\\lib\\site-packages\\scrapy\\templates\\project', created in:
C:\Users\felix\PycharmProjects\scrapy_quotes\quotes You can start your first spider with:
cd quotes
scrapy genspider example example.com

执行这条命令将创建一个新目录:包括的文件如下:

scrapy.cfg:项目配置文件

quotes/:项目python模块,待会代码将从这里导入

quotes/items:项目items文件

quotes/pipelines.py:项目管道文件

quotes/settings.py:项目配置文件

quotes/spiders:放置spider的目录

(2):创建爬虫

cd quotes # 先进入项目目录

scrapy genspider name name.com  # 创建爬虫

scrapy crawl name # 运行爬虫

(3):创建的爬虫类解析

import scrapy
from quotes.items import QuotesItem class QuotespiderSpider(scrapy.Spider):
name = 'quotespider' # 爬虫名称
allowed_domains = ['quotes.toscrape.com'] # 允许爬虫访问的域名,可以多个
start_urls = ['http://quotes.toscrape.com/'] # 爬虫开始的url地址 def parse(self, response): # 爬虫返回的数据解析函数
quotes = response.css('.quote') # 通过css选择器选择相应的内容
for quote in quotes:
item = QuotesItem() # item做数据持久化的
text = quote.css('.text::text').extract_first() # ::text 表示输出文本内容
author = quote.css('.author::text').extract_first() # ::text 表示输出文本内容
tags = quote.css('.tags .tag::text').extract() # extract_first() 表示找第一个,extract()表示找到所有,并返回一个列表
item['text'] = text # 赋值 首先要在items类中创建
item['tags'] = tags
item['author'] = author
yield item # 生成item 做数据存储
next = response.css('.pager .next a::attr(href)').extract_first() # 得到相对的url
url = response.urljoin(next) # 获取一个绝对的url,获取下一页的url
yield scrapy.Request(url=url, callback=self.parse) # 处理链接,将返回的response交给callback的回调函数 # scrapy shell quotes.toscrape.com # 进入命令行调试
# scrapy crawl quotes -o quotes.json(.csv .xml) # 数据保存,可以保存多个类型

(4):items类解析

Items是将要装载抓取的数据的容器,它工作方式像python里面的字典,但它提供更多的保护,比如对未定义的字段填充以防止拼写错误。

它通过创建一个scrapy.item.Item类来声明,定义它的属性为scrpy.item.Field对象,就像是一个对象关系映射(ORM). 
我们通过将需要的item模型化,来控制获得的站点数据,比如我们要获得站点的名字,url和网站描述,我们定义这三种属性的域。要做到这点,我们编辑在quotes目录下的items.py文件,我们的Item类将会是这样

import scrapy

class QuotesItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
text=scrapy.Field() #创建文本字段
author=scrapy.Field() # 创建作者字段
tags=scrapy.Field() # 创建标签字段

(5):pipeline类解析

import pymongo
from scrapy.exceptions import DropItem # 要使用pipline一定要在设置中指定
class QuotesPipeline(object):
def process_item(self, item, spider):
return item # 一个pipeline要么返回item 要么返回dropitem
class TextPipeline(object):
def __init__(self):
self.limit = 50 def process_item(self, item, spider):
     # 这里的item为item类中的item
     # 大于50字的文本进行处理
if item['text']:
if len(item['text']) > self.limit:
item['text'] = item['text'][0:self.limit].rstrip() + '...'
return item
else:
return DropItem('Missing Text') # 添加数据库的操作
class MongoPipeline(object):
def __init__(self, mongo_url, mongo_db):
     # 初始化数据库
self.mongo_url = mongo_url
self.mongo_db = mongo_db

   # 该类方法可以从设置中读取数据
@classmethod
def from_crawler(cls, crawler):
return cls(
# 从设置里面获取数据库的设置信息
mongo_url=crawler.settings.get('MONGO_URL'),
mongo_db=crawler.settings.get('MONGO_DB')
) def open_spider(self, spider): # 启动爬虫时做的操作
     # 初始化数据库
self.client = pymongo.MongoClient(self.mongo_url)
self.db = self.client[self.mongo_db]
   # 处理item的方法,必须实现返回item或者dropitem
def process_item(self, item, spider):
name = item.__class__.__name__ # item的名称
self.db[name].insert(dict(item))
return item def close_spider(self, spider):
self.client.close() # 结束爬虫时关闭数据库

(6):运行

scrapy crawl quotespider。

爬虫(九):scrapy框架回顾的更多相关文章

  1. Python网络爬虫之Scrapy框架(CrawlSpider)

    目录 Python网络爬虫之Scrapy框架(CrawlSpider) CrawlSpider使用 爬取糗事百科糗图板块的所有页码数据 Python网络爬虫之Scrapy框架(CrawlSpider) ...

  2. 爬虫06 /scrapy框架

    爬虫06 /scrapy框架 目录 爬虫06 /scrapy框架 1. scrapy概述/安装 2. 基本使用 1. 创建工程 2. 数据分析 3. 持久化存储 3. 全栈数据的爬取 4. 五大核心组 ...

  3. Python逆向爬虫之scrapy框架,非常详细

    爬虫系列目录 目录 Python逆向爬虫之scrapy框架,非常详细 一.爬虫入门 1.1 定义需求 1.2 需求分析 1.2.1 下载某个页面上所有的图片 1.2.2 分页 1.2.3 进行下载图片 ...

  4. 爬虫之scrapy框架

    解析 Scrapy解释 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中.其最初是为了页面抓取 (更确切来说, 网络抓 ...

  5. Python爬虫进阶(Scrapy框架爬虫)

    准备工作:           配置环境问题什么的我昨天已经写了,那么今天直接安装三个库                        首先第一步:                           ...

  6. 爬虫之Scrapy框架介绍

    Scrapy介绍 Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛. 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内 ...

  7. 16.Python网络爬虫之Scrapy框架(CrawlSpider)

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

  8. python爬虫随笔-scrapy框架(1)——scrapy框架的安装和结构介绍

    scrapy框架简介 Scrapy,Python开发的一个快速.高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘.监测和自动化测试 ...

  9. 5、爬虫之scrapy框架

    一 scrapy框架简介 1 介绍 Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的,使用它可以以快速.简单.可扩展的方式从网站中提取所需的数据.但目前Sc ...

  10. Python学习---爬虫学习[scrapy框架初识]

    Scrapy Scrapy是一个框架,可以帮助我们进行创建项目,运行项目,可以帮我们下载,解析网页,同时支持cookies和自定义其他功能. Scrapy是一个为了爬取网站数据,提取结构性数据而编写的 ...

随机推荐

  1. Istio旨在成为容器化微服务的网格管道

    在精彩的软件容器世界中,当新项目涌现并解决你认为早已解决的问题时,这感觉就像地面在你的脚下不断地移动.在许多情况下,这些问题很久以前被解决,但现在的云原生架构正在推动着更大规模的应用程序部署,这就需要 ...

  2. nodeJs+vue安装教程详解 相信

    相信很多朋友都在装node服务和安装vue的时候会遇到一些问题,下面为大家详细介绍node服务的安装以及vue的安装: 1.nodeJs官网下载版本(根据自己电脑的配置进行相应下载即可):默认安装路径 ...

  3. PowerShell将运行结果保存为文件

    1. Out-File 示例: get-process | Out-File -filepath a.txt 跟“>”是一样的效果 输出 为普通文本 2. Export-Clixml 示例: g ...

  4. linux 基础指令

    df -h 查看磁盘空间 root@ubuntu:/etc# df -h Filesystem Size Used Avail Use% Mounted on udev 970M 0 970M 0% ...

  5. Spark机器学习基础-特征工程

    对连续值处理 0.binarizer/二值化 from __future__ import print_function from pyspark.sql import SparkSession fr ...

  6. Centos6 r8192ce_pci

    Centos6 r8192ce_pci # # yum install epel-release# yum-config-manager --enable rhui-REGION-rhel-serve ...

  7. Spring Boot整合Spring Session实战

    传统java web应用session都是由应用服务器(如tomcat)保存在内存中,这对应但节点应用来说没问题:但对于应用集群来说会造成各节点之间的session无法共享,一个节点挂掉后,其他节点接 ...

  8. 我自己用C++写了个GMM(Gaussian mixture model)模型

    我自己用C++写了个GMM(Gaussian mixture model)模型 Written for an assignment 之前粗粗了解了GMM的原理,但是没有细看,现在有个Assignmen ...

  9. English-培训4-How do you spend your day

  10. 处理request接收参数的中文乱码的问题:

    Ø POST的解决方案: * POST的参数在请求体中,直接到达后台的Servlet.数据封装到Servlet中的request中.request也有一个缓冲区.request的缓冲区也是ISO-88 ...