最近正在學習Python,剛好有一小部份開始介紹到Python Flask上傳到heroku,但開始產生了一個小問題:
感覺起來,用Python 去寫一個網站,跟 我用dreamweaver把網頁寫一寫再用FTP上傳上去,那後者不是會比較簡單一點嗎? 因為顯示出來的結果不是都一樣? 如果是用Python去寫網頁,有什麼是比較實際的考量嗎??例如說安全性或是什麼之類的嗎?
** Python Flask ** 這個目前我只學習了2天,所以如果我問的這個問題感覺被冒犯了,希望能請見諒,因我想要知道的是,這一塊是否有值得再繼續鑽研
有些跟資料庫相關的事,用php來解決會很方便,有些卡到硬體跟爬蟲相關的事,我就真的不得不動用python來解決,各有利弊
像這個把資料查詢出來丟json給前端去呈現的工作,用php做,3行搞定(中間好幾行SQL是為了編輯方便才會折行,我習慣了)
讓python來讀寫資料庫,要多繞一些圈,還要加掛一些函式庫,我不覺得比較簡化
但如果是爬蟲的事,我用php寫,會寫到暈倒
function getNeverConfirmedData()
{
global $pdo;
$statement = $pdo->prepare(
"SELECT
`id` as `流水號`
,`applydate` as `申請時間`
,`ALIVER_NAME` AS `申請人`
,`ALIVER_TEL` AS `連絡電話`
,CASE `PAYMENTMETHOD` WHEN 0 THEN '預付' WHEN 1 THEN '現金袋' WHEN 2 THEN concat('匯款',`memo`) END `付款方式`
,`SUM` AS `金額`
,concat('detail://',`uid`) AS `明細`
FROM `mydb`.`applyments` as `m`
WHERE `m`.`CONFIRMED` = 0 ;"
);
$statement->execute();
return json_encode($statement->fetchAll(PDO::FETCH_ASSOC));
}
aliver嚇人嗎?嗯,是很嚇人,活人,哈
不得不說,爬蟲真的還是用python才會簡單,在開始學python爬蟲之前,我原本的想法是: 希望能用自己熟的程式來學(php or Java), 先在網路上看了有關php的爬蟲,但光看介紹,我就倒退好幾步。還是學python吧~~ 還有youtue影片的相關教學。
但無論如何,謝謝前輩們耐心的跟我解說。
謝謝
不怕丟臉 ~ 這是我用來爬KKBOX抓某個歌手所有歌曲(好吧,大眾知名的)清單的即時爬蟲(用戶搜尋才去爬),用PHP+CURL+SIMPLE HTML DOM寫的
真的超繞口
function SeekAllSingers($singer, $type)
{
$vurl = "https://www.kkbox.com/tw/tc/search.php?word=XXXXXX&search=song&cur_page=";
$res = array();
$misscnt = 0;
$cont = true;
$pageindex = range(1, 3);
foreach ($pageindex as $pagex) {
$aurl = str_replace("XXXXXX", $singer, $vurl) . $pagex;
$html = str_get_html(getPageHTML($aurl))->find("td[class=song-data]");
if ($cont and count($html) > 0) {
foreach ($html as $td) {
$vtd = str_get_html($td);
$title = $vtd->find("a", 0)->innertext;
$vsg = $vtd->find("div[class=song-artist-album]", 0)->find("a", 0)->title;
$fullmatch = 0;
$arrsinger = explode('+', $singer);
$mch = count($arrsinger);
if ($mch > 1) {
foreach ($arrsinger as $sk) {
$fullmatch = $fullmatch + (strpos($vsg, trim($sk)) !== false ? 1 : 0);
}
} elseif ($mch === 1) {
$fullmatch = $mch;
}
if ($fullmatch >= $mch) {
$bname = stripSpecTag($type === "singers" ?
trim($vsg) :
trim(preg_replace("/\,/", " ", $vsg)) . ' ' . trim($title));
$bname = preg_replace('/\s{2,}/', ' ', $bname);
if (strpos($bname, $singer, 0) === false) {
$misscnt++;
$cont = rand(0, $misscnt) > 10 ? false : true;
if (!$cont) break;
}
if ($cont and in_array($bname, $res) == false and trim($bname) != "") {
array_push($res, $bname);
}
}
}
if (!$cont) break;
} else {
break;
}
}
return $res;
}
用python爬KKBOX(沒貼全,供人參考用,有些變數/list/dict沒跟上
mainresp = requests.get('https://www.kkbox.com/tw/tc/')
xtree = html.fromstring(mainresp.text)
sectionHits = xtree.xpath('//div[@class="hit-card"]/div[1]/a[1]/@href')
if len(sectionHits) > 0:
for secx in sectionHits:
DetailContent = requests.get(secx)
if(len(DetailContent.text) > 500):
dtree = html.fromstring(DetailContent.text)
blist = list()
altext = SongRE.sub(
"", str(dtree.xpath('//div[@class="four-more-meta"][1]/img[1]/@alt'))).strip()
if altext in dicList:
blist = dicList[altext]
我剛剛仔細的看了大家的回覆,但有個問題我更想要問:
假設,我沒有誤解大家的意思,Flask 比較屬於後端在處理的。
那如果我這個網站的資料庫用的是mysql,前端的我可能是使用PHP寫,而後端是用Python的Flask去寫,兩者再共同連到mysql的資料庫裡面。
我這樣子的想法是正確的嗎?
PHP關前端什麼事?你是不是誤會了code behind(asp.net)跟code inline(php)的差別哩?
<?php
?>
只會在伺服器端執行,客戶端的瀏覽器是壓根看不見這段程式碼,伺服器只會把這段程式碼透過echo轉成HTML一並輸出,而不是前端執行PHP
喔~~原來如此~ 大概明白一點了!! 謝謝前輩!
這是我正在寫的東西,一個php檔就搞定前端跟後端要做的工作,第一個箭頭是登出,第二個是登入、第三個箭頭是抓未確認的報名表,第四個箭頭就是抓明細資料,如果什麼都不是,就顯示主頁面,主頁面裡就負責安排畫面,javascript就處理ajax抓資料及後台登入的工作....聽起來很難,其實也只是一些資料庫跟AD驗證的動作,腦袋清楚一點別迷路就好(我開車不用GPS,因為哪裡來往哪去都清清楚楚)