爬取資料不儲存,就是耍流氓(3)

2021-09-05 09:57:08 字數 4636 閱讀 5545

爬蟲利器初體驗(1)

聽說你的爬蟲又被封了?(2)

爬取資料不儲存,就是耍流氓(3)

爬取兩萬多租房資料,告訴你廣州房租現狀(4)

scrapy 也能爬取妹子圖?(5)

ok,通過簽名兩篇文章《爬蟲利器初體驗(1)》《聽說你的爬蟲又被封了?(2)》,我們初體驗也過了,爬蟲**健壯性也公升級為 plus 了。都分析到這個地步了,是不是感覺還少了點什麼?對,我們還沒儲存資料呀?不儲存,這不是瞎忙活嗎?

item 是我們儲存資料的容器,其類似於 python 中的字典。使用 item 的好處在於: **item 提供了額外保護機制來避免拼寫錯誤導致的未定義字段錯誤。**且看栗子:

import scrapy

class doubantop250item(scrapy.item):

title = scrapy.field() # 電影名字

star = scrapy.field() # 電影評分

quote = scrapy.field() # 膾炙人口的一句話

movieinfo = scrapy.field() # 電影的描述資訊,包括導演、主演、電影型別

pipelines.py 一般我們用於儲存資料,其方法的一些介紹如下圖。下面,我會分多種方式來儲存我們的資料,避免你耍流氓。

file_name = base_dir + '/doubantop250/data.json' # json 檔案路徑

def process_item(self, item, spider):

file = open(self.file_name, 'r', encoding='utf-8')

load_data = json.load(file)

file = open(self.file_name, 'w', encoding='utf-8')

json.dump(load_data, file, ensure_ascii=false) # 儲存資料

try:# 如何有原始檔沒有 headers ,將呼叫傳進來的 headers

headers = next(f_csv)

except:

headers = new_headers

old_data = list(f_csv)

with open(file_name, 'w') as f2:# 儲存資料

# 實現儲存到mongo資料庫的類,

collection = 'douban' # mongo 資料庫的 collection 名字

def __init__(self, mongo_uri, db_name, db_user, db_pass):

self.mongo_uri = mongo_uri

self.db_name = db_name

self.db_user = db_user

self.db_pass = db_pass

@classmethod

def from_crawler(cls, crawler):

# scrapy 為我們訪問settings提供了這樣的乙個方法,這裡,

# 我們需要從 settings.py 檔案中,取得資料庫的uri和資料庫名稱

return cls(

mongo_uri=crawler.settings.get('mongo_uri'),

db_name=crawler.settings.get('db_name'),

db_user=crawler.settings.get('db_user'),

db_pass=crawler.settings.get('db_pass'))

def open_spider(self, spider): # 爬蟲啟動時呼叫,連線到資料庫

self.client = mongoclient(self.mongo_uri)

self.zfdb = self.client[self.db_name]

self.zfdb.authenticate(self.db_user, self.db_pass)

def close_spider(self, spider): # 爬蟲關閉時呼叫,關閉資料庫連線

# echo 為 true 將會輸出 sql 原生語句

engine = create_engine(mysql_uri, echo=true)

from sqlalchemy.ext.declarative import declarative_base

base = declarative_base()

# 建立單錶

class movie(base):

__tablename__ = 'movies'

id = column(bigint, primary_key=true, autoincrement=true)

title = column(string(200))

# 初始化資料庫

def init_db(self):

self.base.metadata.create_all(self.engine)

# 刪除資料庫

def drop_db(self):

self.base.metadata.drop_all(self.engine)

def open_spider(self, spider): # 爬蟲啟動時呼叫,連線到資料庫

在寫好相關的 pipeline 之後,需要在 settings.py 中啟用相關的 pipeline,後面的數字為呼叫的優先順序,數字是0-1000,你可以自定義。你可以所有格式都儲存,也可以注釋掉其他,值保留乙個。

爬取資料不儲存,就是耍流氓

我們初體驗也過了,爬蟲 健壯性也公升級為 plus 了。都分析到這個地步了,是不是感覺還少了點什麼?對,我們還沒儲存資料呀?不儲存,這不是瞎忙活嗎?item 是我們儲存資料的容器,其類似於 python 中的字典。使用 item 的好處在於 item 提供了額外保護機制來避免拼寫錯誤導致的未定義字段...

知乎資料爬取及儲存

import requests from pymysql conn import mysql connect url 分析所有請求後發現上面的url可以直接獲取所需資料的json檔案,兩個引數分 別為offset,limit。其中offset控制起始資料序號,limit控制本次資料數量 經測試off...

python3爬取電影資料

爬取電影票房資料,用於統計建模分析。目標 為電影票房資料庫 基本的爬取靜態 的技術,模擬登陸使用的是最簡單的cookies。這種模擬登陸的方式雖然簡單但有很大的侷限性,時效性比較短,也許兩三天後就失效了,或者網頁改版一點也會導致失效。最好的方式還是找到登陸頁面,獲取需要提交的資料和提交方式,模擬我們...