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...