爬蟲利器初體驗(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。這種模擬登陸的方式雖然簡單但有很大的侷限性,時效性比較短,也許兩三天後就失效了,或者網頁改版一點也會導致失效。最好的方式還是找到登陸頁面,獲取需要提交的資料和提交方式,模擬我們...