使用scrapy編寫爬蟲並入庫Mysql全過程

2021-08-17 03:51:05 字數 3368 閱讀 5499

1、使用pip install scrapy 安裝scrapy

2、開啟cmd命令列視窗,建立屬於自己的爬蟲專案工程。命令:scrapy startproject first

3、通過步驟2爬蟲工程已經建立完畢,使用pycharm開啟,其目錄結構如下:

4、其中spiders資料夾專門用來存放爬蟲的檔案,items.py用來儲存爬蟲的資料,middlewares.py用來處理爬蟲前的請求和響應,pipelines.py在儲存資料前,資料會一次通過管道,進行處理,settings全域性爬蟲的配置檔案,在其中加入資料庫的配置資訊,scrapy.sfg用於部署爬蟲專案到伺服器中。

5、再次開啟cmd,進入剛才建立的專案spiders底下,輸入命令:scrapy genspider jobbole blog.jobbole.com,爬蟲檔案建立

成功。

6、在方法parase中定義自己的頁面解析方式。(css選擇器、xpath方式、正規表示式等等都會用在裡面)

7、在item.py中定義需要儲存一些什麼資料,然後在爬蟲檔案jobbole.py中建立該類的例項物件:

然後把解析出的資料一一對應儲存,資料名在將來會與資料庫中建表時的列名保持一致

8、這樣資料就可以進一步的進入到管道pipeline中進行在處理了,當然儲存至mysql資料庫,也是在pipeline.py這個檔案中完成的。說到將資料儲存到資料庫就必須談談資料的同步儲存和非同步儲存。一般來說資料的入庫時間是要遠大於爬蟲解析網頁獲取資料的,這就導致,當資料量很大時,資料入庫的速度趕不上爬蟲爬下來的資料,在同步儲存的情況下這就會造成阻塞,導致**異常報錯,而以異常的方式則不會出現這個問題。下面分別介紹在pipeline.py檔案中編寫這兩種處理方式:

同步pipeline:

class mysqlpipeline(object):

def __init__(self):

self.conn = mysqldb.connect('localhost','root','123456','article',charset="utf8", use_unicode=true)

self.cursor = self.conn.cursor()

def process_item(self, item, spider):

insert_sql = """

insert into info(date,title,url,url_object_id,front_image_url,front_image_path,praise,collect,comment)

values (%s,%s,%s,%s,%s,%s,%s,%s,%s)

"""self.cursor.execute(insert_sql, (item["date"],item["title"],item["url"],item["url_object_id"],

item["front_image_url"],item["front_image_path"],item["praise"],

item["collect"],item["comment"]))

self.conn.commit()

非同步pipeline:

class mysqltwistedpipepline(object):

def __init__(self, dbpool):

self.dbpool = dbpool

@classmethod

def from_settings(cls, settings):

param = dict(

host = settings["mysql_host"],

db = settings["mysql_dbname"],

user = settings["mysql_user"],

password = settings["mysql_password"],

charset = "utf8",

cursorclass = mysqldb.cursors.dictcursor,

use_unicode = true

)dbpool = adbapi.connectionpool("mysqldb",**param)

return cls(dbpool)

def process_item(self, item, spider):

#使用twisted將mysql插入非同步化

query = self.dbpool.runinteraction(self.do_insert,item)

query.adderrback(self.handle_error) #處理異常

def handle_error(self, failure):

#處理非同步插入錯誤

print(failure)

def do_insert(self, cursor, item):

insert_sql = """

insert into info(date,title,url,url_object_id,front_image_url,front_image_path,praise,collect,comment)

values (%s,%s,%s,%s,%s,%s,%s,%s,%s)

"""cursor.execute(insert_sql, (item["date"],item["title"],item["url"],item["url_object_id"],

item["front_image_url"],item["front_image_path"],item["praise"],

item["collect"],item["comment"]))

9、寫完pipeline後在settings.py進行配置,以上兩種方式選擇其中的一種即可:

10、run:main之後,資料依次入庫:

基於Scrapy框架編寫爬蟲專案

知識點 2種安裝模組的方式。以下兩種方式可以安裝絕大部分模組,網路安裝 指直接在控制台 pip install xx 第6條,配置過程 1.複製 f 程式設計 python lib site packages pywin32 system32 下的兩個.dll檔案 2.貼上到 c windows s...

使用scrapy開啟爬蟲

scrapy startproject test 建立專案 建立的檔案介紹 scrapy.cfg 專案配置檔案,專案配置檔案路徑部署資訊 items.py 定義item資料結構的地方 settings.py 是專案的設定檔案,可以定義專案的全域性設定 spiders資料夾 編寫xpath和正規表示式...

網路爬蟲(三) 簡單使用scrapy

一.首先簡單了解scrapy的架構 官方給出的解釋 spiders spider是scrapy使用者編寫用於分析response並提取item 即獲取到的item 或額外跟進的url的類。每個spider負責處理乙個特定 或一些 item pipeline item pipeline負責處理被spi...