urllib的用法及異常處理
beautiful soup的簡單應用
mysqldb的基礎用法
正規表示式的簡單應用
環境配置
beautiful soup:
mysqldb:
python setup.pyinstall
環境配置好之後,我們便可以開心地擼爬蟲了
框架思路
我們在這個頁面需要獲取的東西有:
總的頁碼數,每一頁的所有問題鏈結。
接下來我們需要遍歷所有的問題,來抓取每乙個詳情頁面,提取問題,問題內容,回答者,回答時間,回答內容。
最後,我們需要把這些內容儲存到資料庫中。
要點簡析
1.日誌輸出
日誌輸出,我們要輸出時間和爬取的狀態,比如像下面這樣:
[2015-08-10 03:05:20] 113011 號問題存在其他答案 我個人認為應該是櫻桃溝很美的
[2015-08-10 03:05:20] 儲存到資料庫,此問題的id為 113011
[2015-08-10 03:05:19] 儲存到資料庫,此問題的id為 113010
所以,我們需要引入時間函式,然後寫乙個獲取當前時間的函式
以上分別是獲取帶具體時間和獲取日期的函式,在輸出時,我們可以在輸出語句的前面呼叫這函式即可。
然後我們需要將緩衝區設定輸出到log中,在程式的最前面加上這兩句即可
這樣,所有的print語句輸出的內容就會儲存到out.log檔案中了。
2.頁碼儲存
爬蟲爬取過程中可能出現各種各樣的錯誤,這樣會導致爬蟲的中斷,如果我們重新執行爬蟲,那麼就會導致爬蟲從頭開始執行了,這樣顯然是不合理的。所以,我們需要把當前爬取的頁面儲存下來,比如可以儲存到文字中,假如爬蟲中斷了,重新執行爬蟲,讀取文字檔案的內容,接著爬取即可。
這樣,不管我們爬蟲中途遇到什麼錯誤,媽媽也不會擔心了
3.頁面處理
頁面處理過程中,我們可能遇到各種各樣奇葩的html**,和上一節一樣,我們沿用乙個頁面處理類即可。
我們可以用一段含有html**的文字,經過呼叫replace方法之後,各種冗餘的html**就會處理好了。
比如我們這麼一段**:
經過處理後便會變成如下的樣子:
經過上面的處理,所有亂亂的**都會被處理好了。
4.儲存到資料庫
在這裡,我們想實現乙個通用的方法,就是把儲存的乙個個內容變成字典的形式,然後執行插入語句的時候,自動構建對應的sql語句,插入資料。
比如我們構造如下的字典:
構造sql語句並插入到資料庫的方法如下:
這裡我們只需要傳入那個字典,便會構建出對應字典鍵值和鍵名的sql語句,完成插入。
5.php讀取日誌
我們將執行結果輸出到了日誌裡,那麼怎麼檢視日誌呢?很簡單,在這裡提供兩種方法
方法一:
php倒序輸出所有日誌內容
此方法可以看到所有的輸入日誌,但是如果日誌太大了,那麼就會報耗費記憶體太大,無法輸出。為此我們就有了第二種方法,利用linux命令,輸出後十行內容。
方法二:
上面兩種方法都是5秒重新整理一次網頁來檢視最新的日誌。
源**放送
好了,閒言碎語不多講,直接上原始碼了
執行的時候執行如下命令即可
nohuppythonspider.py&
執行結果檢視
我們把php檔案和log檔案放在同一目錄下,執行php檔案,便可以看到如下的內容:
小夥伴們趕快試一下吧。
應該這麼回答領導愛問的幾個問題
網上閒逛時發現的,有種得救的感覺 問題一 你愛我嗎?錯誤答案a 愛。錯誤答案b 這還用問嗎?錯誤答案c 你煩不煩啊?標準答案 目光憐愛的望著對方三秒,然後神情鄭重的點一下頭,同時發出 嗯 的聲音,然後一把把她攬在懷裡。解析 答案a會讓她覺得你太不嚴肅了,純粹胡弄她 答案b會讓她覺得你對她的愛不夠堅定...
python常見的問題 python常見問題集錦
webdriverwait 注意內部條件的括號必須是雙層,如 by.id,kw 判斷title,返回布林值 判斷title,返回布林值 webdriverwait driver,10 until ec.presence of element located by.id,kw 判斷某個元素是否被加到了...
Python 人型鐵路問題
如圖有乙個人字形鐵路,有n列火車車從人字鐵路的一端進入,求n列從人字鐵路另一端出來的順序有多少種?解決思路 火車進入人字形鐵路有兩種可能 外面的火車進入一輛 裡面的火車出去一輛 實現 def get num n,m 0 if n 0 return 1 result 0if n 0 result ge...