Scrapy學(xué)習(xí)筆記(3)-循環(huán)爬取以及數(shù)據(jù)庫操作

前言

系統(tǒng)環(huán)境:CentOS7

本文假設(shè)你已經(jīng)安裝了virtualenv刚夺,并且已經(jīng)激活虛擬環(huán)境ENV1,如果沒有,請(qǐng)參考這里:使用virtualenv創(chuàng)建python沙盒(虛擬)環(huán)境米母,在上一篇文章(Scrapy學(xué)習(xí)筆記(2)-使用pycharm在虛擬環(huán)境中運(yùn)行第一個(gè)spider)中我們已經(jīng)能夠使用scrapy的命令行工具創(chuàng)建項(xiàng)目以及spider轮锥、使用Pycharm編碼并在虛擬環(huán)境中運(yùn)行spider抓取http://quotes.toscrape.com/中的article和author信息, 最后將抓取的信息存入txt文件矫钓,上次的spider只能單頁爬取,今天我們?cè)谏洗蔚膕pider上再深入一下舍杜。

目標(biāo)

跟蹤next(下一頁)鏈接循環(huán)爬取http://quotes.toscrape.com/中的article和author信息,將結(jié)果保存到mysql數(shù)據(jù)庫中新娜。

正文

1.因?yàn)橐肞ython操作MySQL數(shù)據(jù)庫,所以先得安裝相關(guān)的Python模塊既绩,本文使用MySQLdb

#sudo yum install mysql-devel

#pip install mysql-devel

2.在數(shù)據(jù)庫中創(chuàng)建目標(biāo)表quotes概龄,建表語句如下:

CREATE TABLE `quotes` (

? `id` int(11) NOT NULL AUTO_INCREMENT,

? `article` varchar(500) DEFAULT NULL,

? `author` varchar(50) DEFAULT NULL,

? PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8;

3.items.py文件詳細(xì)代碼如下:

# -*- 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

4.修改quotes_spider.py如下:

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

import scrapy

from ..items import QuotesItem

from urlparse import urljoin

from scrapy.http import Request

class QuotesSpiderSpider(scrapy.Spider):

? ? name = "quotes_spider"

? ? allowed_domains = ["quotes.toscrape.com"]

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

? ? def parse(self, response):

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

? ? ? ? next_page=response.xpath("http://li[@class='next']/a/@href").extract_first()

? ? ? ? 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')

? ? ? ? ? ? yield item#使用yield返回結(jié)果但不會(huì)中斷程序執(zhí)行

? ? ? ? if next_page:#判斷是否存在next鏈接

? ? ? ? ? ? url=urljoin(self.start_urls[0],next_page)#拼接url

? ? ? ? ? ? yield Request(url,callback=self.parse)

5.修改pipelines.py文件,將爬取到的數(shù)據(jù)保存到數(shù)據(jù)庫

# -*- 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

from twisted.enterprise import adbapi

import MySQLdb

import MySQLdb.cursors

class QuotesPipeline(object):

? ? def __init__(self):

? ? ? ? db_args=dict(

? ? ? ? ? ? host="192.168.0.107",#數(shù)據(jù)庫主機(jī)ip

? ? ? ? ? ? db="scrapy",#數(shù)據(jù)庫名稱

? ? ? ? ? ? user="root",#用戶名

? ? ? ? ? ? passwd="123456",#密碼

? ? ? ? ? ? charset='utf8',#數(shù)據(jù)庫字符編碼

? ? ? ? ? ? cursorclass = MySQLdb.cursors.DictCursor,#以字典的形式返回?cái)?shù)據(jù)集

? ? ? ? ? ? use_unicode = True,

? ? ? ? )

? ? ? ? self.dbpool = adbapi.ConnectionPool('MySQLdb', **db_args)

? ? def process_item(self, item, spider):

? ? ? ? self.dbpool.runInteraction(self.insert_into_quotes, item)

? ? ? ? return item

? ? def insert_into_quotes(self,conn,item):

? ? ? ? conn.execute(

? ? ? ? ? ? '''

? ? ? ? ? ? INSERT INTO quotes(article,author)

? ? ? ? ? ? VALUES(%s,%s)

? ? ? ? ? ? '''

? ? ? ? ? ? ,(item['article'],item['author'])

? ? ? ? )

6.pipeline.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,

}

7.開始運(yùn)行spider

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

8.檢驗(yàn)結(jié)果饲握,Done!

更多原創(chuàng)文章私杜,盡在金筆頭博客

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市救欧,隨后出現(xiàn)的幾起案子衰粹,更是在濱河造成了極大的恐慌,老刑警劉巖笆怠,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件铝耻,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡蹬刷,警方通過查閱死者的電腦和手機(jī)瓢捉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來办成,“玉大人泡态,你說我怎么就攤上這事≌┗穑” “怎么了兽赁?”我有些...
    開封第一講書人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵状答,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我刀崖,道長(zhǎng)惊科,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任亮钦,我火速辦了婚禮馆截,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蜂莉。我一直安慰自己蜡娶,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開白布映穗。 她就那樣靜靜地躺著窖张,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蚁滋。 梳的紋絲不亂的頭發(fā)上宿接,一...
    開封第一講書人閱讀 49,741評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音辕录,去河邊找鬼睦霎。 笑死,一個(gè)胖子當(dāng)著我的面吹牛走诞,可吹牛的內(nèi)容都是我干的副女。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼蚣旱,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼碑幅!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起姻锁,我...
    開封第一講書人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤枕赵,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后位隶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拷窜,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年涧黄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了篮昧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡笋妥,死狀恐怖懊昨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情春宣,我是刑警寧澤酵颁,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布嫉你,位于F島的核電站,受9級(jí)特大地震影響躏惋,放射性物質(zhì)發(fā)生泄漏幽污。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一簿姨、第九天 我趴在偏房一處隱蔽的房頂上張望距误。 院中可真熱鬧,春花似錦扁位、人聲如沸准潭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽刑然。三九已至,卻和暖如春殉簸,著一層夾襖步出監(jiān)牢的瞬間闰集,已是汗流浹背孕似。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來泰國打工捎迫, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留梗掰,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓蝠检,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親挚瘟。 傳聞我的和親對(duì)象是個(gè)殘疾皇子叹谁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348