Scrapy学习笔记(2)-使用pycharm在虚拟环境中运行第一个spider

前言

系统环境:CentOS7

本文假设你已经安装了virtualenv,并且已经激活虚拟环境ENV1,如果没有,请参考这里:使用virtualenv创建python沙盒(虚拟)环境

目标

使用scrapy的命令行工具创建项目以及spider,使用Pycharm编码并在虚拟环境中运行spider抓取http://quotes.toscrape.com/中的article和author信息, 将抓取的信息存入txt文件。

正文

1.使用命令行工具创建项目并指定项目路径,具体用法为

scrapy startproject [project_dir]

项目名称

[project_dir]项目路径,缺省时默认为当前路径

本文中quotes为项目名称,PycharmProjects/quotes为项目路径

(ENV1) [eason@localhost ~]$scrapy startprojectquotesPycharmProjects/quotes

New Scrapy project 'quotes', using template directory '/home/eason/ENV1/lib/python2.7/site-packages/scrapy/templates/project', created in:

/home/eason/PycharmProjects/quotes

You can start your first spider with:

cd PycharmProjects/quotes

scrapy genspider example example.com

(ENV1) [eason@localhost ~]$

2.进入项目路径并创建spider,命令的具体用法为

scrapy genspider [-t template]

[-t template] 指定生成spider的模板,可用模板有如下4种,缺省时默认为basic

basic

crawl

csvfeed

xmlfeed

设定spider的名字

设定allowed_domains和start_urls

本文的spider名称为quotes_spider

(ENV1) [eason@localhost ~]$cd PycharmProjects/quotes

(ENV1) [eason@localhost quotes]$scrapy genspiderquotes_spiderquotes.toscrape.com

Created spider 'quotes_spider' using template 'basic' in module:

quotes.spiders.quotes_spider

(ENV1) [eason@localhost quotes]$

至此,创建项目以及spider的工作已经完成了。

3.在Pycharm中打开上面刚刚创建的项目


红框内为我们刚才创建项目的目录结构

├── quotes

│  └── spiders

│      └── __init__.py

|      └── quotes_spider.py

│  ├── __init__.py

│  ├── items.py

│  ├── pipelines.py

│  ├── settings.py

└── scrapy.cfg

参考官网文档的解释如下:

quotes/

project's Python module, you'll import your code from here(该项目的python模块。之后您将在此加入代码。)

quotes/spiders/

a directory where you'll later put your spiders(放置spider代码的目录.用来将网页爬下来)

quotes/spiders/quotes_spider.py

刚才自动生成的spider文件

quotes/items.py

project items definition file(项目中的item文件,其实就是要抓取的数据的结构定义)

quotes/pipelines.py

project pipelines file(项目的pipelines文件,在这里可以定义将抓取的数据以何种方式保存)

quotes/settings.py

project settings file(项目的设置文件)

scrapy.cfg

deploy configuration file(项目配置文件)

4.此时打开quotes_spider.py 文件会报错,提示找不到scrapy的模块,这是因为当前pycharm是在全局环境打开该项目,而我全局环境并没有安装scrapy,所以下面更改项目设置,让pycharm能使用虚拟环境的包和模块


依次点击菜单栏的File-->Settings打开设置界面,Project Interpreter下拉选择当前已经激活的虚拟环境,可能你那边的路径不一样,本文是/home/eason/ENV1/bin/python

选好以后点击OK,重新打开quotes_spider.py发现已经不报错了。

5.编辑items.py定义数据结构

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

# Define here the models for your scraped items

#

# See documentation in:

# http://doc.scrapy.org/en/latest/topics/items.html

import scrapy

class QuotesItem(scrapy.Item):

# define the fields for your item here like:

# name = scrapy.Field()

article=scrapy.Field()

author=scrapy.Field()

pass

5.编辑quotes_spider.py添加爬取规则

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

import scrapy

from ..items import QuotesItem

class QuotesSpiderSpider(scrapy.Spider):

name = "quotes_spider"

allowed_domains = ["quotes.toscrape.com"]

start_urls = ['http://quotes.toscrape.com/']

def parse(self, response):

items=[]

articles=response.xpath("//div[@class='quote']")

for article in articles:

item=QuotesItem()

content=article.xpath("span[@class='text']/text()").extract_first()

author=article.xpath("span/small[@class='author']/text()").extract_first()

item['article']=content.encode('utf-8')

item['author'] = author.encode('utf-8')

items.append(item)

return items

6.编辑pipelines.py,确定数据保存方法,本文为写到文本文件result.txt中

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

# Define your item pipelines here

#

# Don't forget to add your pipeline to the ITEM_PIPELINES setting

# See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html

class QuotesPipeline(object):

def process_item(self, item, spider):

#爬取的数据保存在/home/eason/PycharmProjects/quotes/路径下

f = open(r"/home/eason/PycharmProjects/quotes/result.txt", "a")

f.write(item['article']+'\t' +item['author']+'\n')

f.close()

return item

7.为了让pipeline.py生效,还需要在settings.py文件中注册

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

# Scrapy settings for quotes project

#

# For simplicity, this file contains only settings considered important or

# commonly used. You can find more settings consulting the documentation:

#

#    http://doc.scrapy.org/en/latest/topics/settings.html

#    http://scrapy.readthedocs.org/en/latest/topics/downloader-middleware.html

#    http://scrapy.readthedocs.org/en/latest/topics/spider-middleware.html

BOT_NAME = 'quotes'

SPIDER_MODULES = ['quotes.spiders']

NEWSPIDER_MODULE = 'quotes.spiders'

# Obey robots.txt rules

ROBOTSTXT_OBEY = True

# Configure item pipelines

# See http://scrapy.readthedocs.org/en/latest/topics/item-pipeline.html

ITEM_PIPELINES = {

'quotes.pipelines.QuotesPipeline': 300,

}

8.在Pycharm中打开Terminal,激活虚拟环境并运行spider

[eason@localhost quotes]$source /home/eason/ENV1/bin/activate

(ENV1) [eason@localhost quotes]$scrapy crawl quotes_spider

9.爬取完成后,会在/home/eason/PycharmProjects/quotes/路径下生成result.txt文件,打开result.txt后内容如下

10.Done!

更多原创文章,尽在金笔头博客

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,817评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,329评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,354评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,498评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,600评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,829评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,979评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,722评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,189评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,519评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,654评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,329评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,940评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,762评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,993评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,382评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,543评论 2 349

推荐阅读更多精彩内容