Scrapy爬取網頁並儲存到資料庫中

2021-07-24 10:20:35 字數 3007 閱讀 3582

scrapy爬取網頁並儲存到資料庫中

一.新建乙個scrapy工程。進入乙個你想用來儲存**的資料夾,然後執行:

t:\>scrapy startproject fjsen

會生成一堆資料夾和檔案:

scrapy.cfg: 專案配置檔案

tutorial/: 專案python模組, 呆會**將從這裡匯入

tutorial/items.py: 專案items檔案

tutorial/pipelines.py: 專案管道檔案

tutorial/settings.py: 專案配置檔案

tutorial/spiders: 放置spider的目錄

二.定義item

比如我們要獲得站點的名字,url和**描述,我們定義這三種屬性的域。

from scrapy.item import item, field

class

fjsenitem

(item):

# define the fields for your item here like:

# name = field()

title=field()

link=field()

addtime=field()

三.建立乙個spider,你必須為scrapy.spider.basespider建立乙個子類,並確定三個主要的、強制的屬性:

name:爬蟲的識別名,它必須是唯一的,在不同的爬蟲中你必須定義不同的名字.

parse():爬蟲的方法,呼叫時候傳入從每乙個url傳回的response物件作為引數,response將會是parse方法的唯一的乙個引數,

這個方法負責解析返回的資料、匹配抓取的資料(解析為item)並跟蹤更多的url。

在tutorial\spiders目錄下新建乙個fjsen_spider.py,內容如下:

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

from scrapy.spider import basespider

from scrapy.selector import htmlxpathselector

from fjsen.items import fjsenitem

class

fjsenspider

(basespider):

name="fjsen"

allowed_domains=["fjsen.com"]

start_urls=[''+str(x)+'.htm'

for x in range(2,11)]+['']

defparse

(self,response):

hxs=htmlxpathselector(response)

sites=hxs.select('//ul/li')

items=

for site in sites:

item=fjsenitem()

item['title']=site.select('a/text()').extract()

item['link'] = site.select('a/@href').extract()

item['addtime']=site.select('span/text()').extract()

return items

四、將抓取到的資料存入資料庫sqlite3中,修改pipelines.py如下:

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

from os import path

from scrapy import signals

from scrapy.xlib.pydispatch import dispatcher

class

fjsenpipeline

(object):

def__init__

(self):

self.conn=none

dispatcher.connect(self.initialize,signals.engine_started)

dispatcher.connect(self.finalize,signals.engine_stopped)

defprocess_item

(self,item,spider):

self.conn.execute('insert into fjsen values(?,?,?,?)',(none,item['title'][0],''+item['link'][0],item['addtime'][0]))

return item

definitialize

(self):

if path.exists(self.filename):

self.conn=sqlite3.connect(self.filename)

else:

self.conn=self.create_table(self.filename)

deffinalize

(self):

if self.conn is

notnone:

self.conn.commit()

self.conn.close()

self.conn=none

defcreate_table

(self,filename):

conn=sqlite3.connect(filename)

conn.execute("""create table fjsen(id integer primary key autoincrement,title text,link text,addtime text)""")

conn.commit()

return conn

五、修改setting.py這個檔案:將下面這句話加進去

item_pipelines=['fjsen.pipelines.fjsenpipeline']

六、執行命令

t:\tutorial>scrapy crawl fjsen

scrapy爬取網頁資訊,儲存到MySQL資料庫

爬取 網頁資訊分析 我們要爬取頁面的名言內容和相對應的標籤內容,存入mysql資料庫中。通過分析頁面,每乙個名言的div盒子的class名稱都是quote,我們使用css選擇器,先把盒子中內容挑選出來,再對盒子中的內容進行提取。response.css quote 設v為盒子中的內容 盒子中第乙個s...

Scrapy爬取並儲存到TXT檔案

在建立完成專案並建立爬蟲的基礎上,編寫儲存到txt的專案 1.將 robotstxt obey 設定為false 2.將 item pipelines 開啟 item是scrapy提供的類似於字典型別的資料容器,它與字典最大的區別在於它規定了統一的資料規格樣式,即具有統一性與結構性。這樣既方便資料的...

scrapy爬取資料並儲存到文字

1.scrapy專案結構如下 2.開啟spidler目錄下的duba.py檔案,如下 這個是根據豆瓣一部分頁面獲取的熱門話題內容,有6條資料 coding utf 8 import scrapy from scrapydemo.items import scrapydemoitem from lxm...