爬蟲 非同步資料寫入框架 adbapi

2022-08-04 10:00:13 字數 1234 閱讀 6464

資料庫pymysql的commit()和execute()在提交資料時,都是同步提交至資料庫,由於scrapy框架資料的解析和非同步多執行緒的,所以scrapy的資料解析速度,要遠高於資料的寫入資料庫的速度。如果資料寫入過慢,會造成資料庫寫入的阻塞,影響資料庫寫入的效率。

通過多執行緒非同步的形式對資料進行寫入,可以提高資料的寫入速度。

使用twisted非同步io框架,實現資料的非同步寫入。

from twisted.enterprise import adbapi

# 初始化資料庫連線池(執行緒池)

# 引數一:mysql的驅動

# 引數二:連線mysql的配置資訊

dbpool = adbapi.connectionpool('

pymysql

', **params)

引數1:在非同步任務中要執行的函式insert_db;

引數2:給該函式insert_db傳遞的引數

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

def

insert_db(self, cursor, item):

insert_sql = "

insert into bole(title, date_time, tags, content, zan_num, keep_num, comment_num, img_src, img_path) values (%s, %s, %s, %s, %s, %s, %s, %s, %s)

"cursor.execute(insert_sql, (item[

'title

'], item['

date_time

'], item['

br#content

'], item['

zan_num

'], item['

keep_num

'], item['

comment_num

'], item['

img_src

'], item['

img_path

']))

在execute()之後,不需要再進行commit(),連線池內部會進行提交的操作。

使用scrapy框架把資料非同步寫入資料庫

在setting中設定mysql連線資訊 host 101.201.70.139 mysql dbname anttest mysql password myjr678 mysql user root 2 在pipeline中新增mysql非同步連線類from twisted.enterprise ...

爬蟲檔案寫入mysql中 爬蟲資料寫入Mysql

coding utf 8 import re import requests import pymysql url headers chrome 58.0.3029.110 safari 537.36 se 2.x metasr 1.0 response requests.get url,heade...

使用scrapy框架爬蟲,寫入到資料庫

import scrapy class bossitem scrapy.item define the fields for your item here like name scrapy.field name scrapy.field 對應實體類的屬性 salary scrapy.field co...