scrapy框架中用ssh連接遠(yuǎn)程服務(wù)器的實(shí)現(xiàn)
前段時(shí)間用scrapy嘗試抓取一些數(shù)據(jù),寫的時(shí)候真的很酸爽,眼睛要花掉了 但是!我沒(méi)有存到數(shù)據(jù)庫(kù)中,也就是說(shuō)我只是確認(rèn)了爬蟲的代碼沒(méi)問(wèn)題(草)
為什么我要用服務(wù)器的mysql,本地的不好嗎? 其實(shí)是我沒(méi)有在本地裝MySQL,但是我有服務(wù)器,再加上有phpmyadmin這么友好的web-base數(shù)據(jù)庫(kù)管理工具,干嘛還折騰本地裝軟件
挖坑
其實(shí)剛開始寫的時(shí)候,我是把數(shù)據(jù)庫(kù)這模塊的代碼拋開的,鏈接數(shù)據(jù)庫(kù)?不是很簡(jiǎn)單的事情嗎,有啥好寫的,首先打開搜索引擎,輸入“ 如何用python連接遠(yuǎn)程mysql ”不就好了嘛!
然后我發(fā)現(xiàn)我看不懂,肯定是我打開的方式不對(duì)
填坑
后來(lái)經(jīng)過(guò)了一路子的折騰,終于寫好了,也連上了!
這里說(shuō)一點(diǎn)不同的,在純python上鏈接遠(yuǎn)程MySQL的代碼,搬到scrapy上,是行不通的,雖然原理差不多,但還是得改
肯定是我搜索的姿勢(shì)不正確,我找不到相關(guān)完整的scrapy鏈接遠(yuǎn)程mysql的參考,純python的參考為居多。當(dāng)時(shí)我另寫了一個(gè)純python測(cè)試鏈接,成功之后搬到scrapy的piplines.py上,Error警告啊
好了好了,不說(shuō)廢話了,回歸正題
開搞
這里用到兩個(gè)庫(kù),pymysql和sshtunnel
sshtunnel
它是讓你通過(guò)ssh安全通道訪問(wèn)遠(yuǎn)程服務(wù)器的python庫(kù)
pymysql
pymysql是在python3.5以上版本,用于鏈接MySQL的一個(gè)庫(kù),如果你是python3.4就裝mysqldb這個(gè)庫(kù),(因?yàn)橛泻芏鄥⒖忌嫌玫氖莔ysqldb庫(kù))所以根據(jù)你的版本,不要裝錯(cuò)了,不然就吃紅條(錯(cuò)誤)吧
代碼
放置在piplines.py中
import pymysql import sshtunnel class SpiderPipeline(object): ? ? server = sshtunnel.SSHTunnelForwarder( ? ? ? ? ? ? ('**.***.**.**', 22), ?#寫你服務(wù)器的ip地址 ? ? ? ? ? ? ssh_username='**', ? ? #連接服務(wù)器的用戶名 ? ? ? ? ? ? ssh_password='**', ? ? #連接服務(wù)器的密碼 ? ? ? ? ? ? remote_bind_address=('**.***.**.**', 3306), #服務(wù)器ip ? ? ? ? ? ? local_bind_address=('127.0.0.1', 3306) ? ? ? ? ) ? ? server.start() ? #連接開啟 ? ? print('SSH連接成功') ? ? def __init__(self): ? ? ? ? ? ? self.connect = pymysql.connect( ? ? ? ? ? ? ? ? host='127.0.0.1', ? ? ? ? ? ? ? ? port=3306, ? ? ? ? ? ? ? ? user='***', ? ? ?# 數(shù)據(jù)庫(kù)的用戶名 ? ? ? ? ? ? ? ? database='***', ?# 數(shù)據(jù)庫(kù)的庫(kù)名 ? ? ? ? ? ? ? ? password='***', ?# 數(shù)據(jù)庫(kù)密碼 ? ? ? ? ? ? ? ? charset='utf8' ? ? ? ? ? ? ) ? ? ? ? ? ? print('mysql數(shù)據(jù)庫(kù)連接成功') ? ? ? ? ? ? self.cursor = self.connect.cursor() ? ? ? ? ? ? print('游標(biāo)獲取成功') ? ? def process_item(self, item, spider): ? ? ? ? #我這里寫的是插入數(shù)據(jù)的sql語(yǔ)句 ? ? ? ? sql = """INSERT INTO charpter(CharterName,NovelName) VALUES ('%s','%s')""" % (item['charter_name'],item['book_name']) ? ? ? ? #執(zhí)行sql ? ? ? ? self.cursor.execute(sql) ? ? ? ? #提交數(shù)據(jù) ? ? ? ? self.connect.commit() ? ? ? ? print('數(shù)據(jù)插入成功') ? ? ? ? return item ? ? def close_spider(self,spider): ? ? ? ? self.cursor.close() ? ?#關(guān)閉游標(biāo) ? ? ? ? self.connect.close() ? #關(guān)閉數(shù)據(jù)庫(kù)鏈接 ? ? ? ? # server.stop() ? ? ? ?#關(guān)閉ssh鏈接
這里就不多說(shuō)廢話了,看代碼里面的注釋基本能看懂了
我這種方式是同步存儲(chǔ),存儲(chǔ)的速度相對(duì)慢一點(diǎn),異步存儲(chǔ)方式我還沒(méi)去研究,這里給自己挖個(gè)坑,研究完異步存儲(chǔ)我就另寫一篇文哈哈哈
Mysql相關(guān)問(wèn)題
如果發(fā)現(xiàn)代碼無(wú)誤的情況下,還是無(wú)法鏈接成功,這個(gè)時(shí)候就要看看你服務(wù)器的MySQL是否允許外來(lái)接入
mysql開放3306端口
要讓MySQL允許鏈接,就要開放3306端口
查看端口是否打開
netstat -an|grep 3306
打開MySQL配置文件
文件路徑:/etc/mysql/my.cnf
將里面的bin-address = 127.0.0.1 注釋掉
重啟MySQL
service mysqld restart
防火墻開放3306端口
查看firewalld狀態(tài)
systemctl status firewalld
開放3306端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
重載
firewalld-cmd --reload
小結(jié)
其實(shí)連接數(shù)據(jù)庫(kù)還是挺簡(jiǎn)單的,至少代碼一看就懂,細(xì)心還是很重要的。當(dāng)死活連不上,死活報(bào)錯(cuò)的時(shí)候,反過(guò)來(lái)想,代碼肯定沒(méi)問(wèn)題,應(yīng)該是哪個(gè)數(shù)據(jù)庫(kù)的表或字段沒(méi)有和代碼上的一一對(duì)應(yīng),密碼有特殊符號(hào)但是沒(méi)轉(zhuǎn)義等等,除此之外剩下的就交給程序玄學(xué)了
到此這篇關(guān)于scrapy 框架中用ssh連接遠(yuǎn)程服務(wù)器的文章就介紹到這了,更多相關(guān)scrapy 框架中用ssh連接遠(yuǎn)程服務(wù)器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何使用python獲取現(xiàn)在的日期與時(shí)間
學(xué)習(xí)了一段時(shí)間的python,不知道大家對(duì)于代碼的編寫有了屬于自己的一套思路了呢,下面這篇文章主要給大家介紹了關(guān)于如何使用python獲取現(xiàn)在的日期與時(shí)間的相關(guān)資料,需要的朋友可以參考下2022-11-11pandas使用apply多列生成一列數(shù)據(jù)的實(shí)例
今天小編就為大家分享一篇pandas使用apply多列生成一列數(shù)據(jù)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-11-11Windows 下python3.8環(huán)境安裝教程圖文詳解
這篇文章主要介紹了Windows 下python3.8環(huán)境安裝教程圖文詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03Python把excel文件數(shù)據(jù)轉(zhuǎn)化為字典格式存儲(chǔ)詳解
這篇文章主要介紹了Python把excel文件數(shù)據(jù)轉(zhuǎn)化為字典格式存儲(chǔ)詳解,在Python中有時(shí)候需要操作excel表格的數(shù)據(jù),把excel表格轉(zhuǎn)化為字典存起來(lái),方便讀取,今天我們就來(lái)看看如何轉(zhuǎn)換,需要的朋友可以參考下2023-08-08Python光學(xué)仿真wxpython透鏡演示系統(tǒng)初始化與參數(shù)調(diào)節(jié)
這篇文章主要為大家介紹了Python光學(xué)仿真wxpython透鏡演示系統(tǒng)的初始化與參數(shù)調(diào)節(jié),同樣在學(xué)習(xí)wxpython透鏡演示系統(tǒng)的入門同學(xué)可以借鑒參考下,希望能夠有所幫助2021-10-10