Python抓取愛問知識人問題並儲存至資料庫

2021-09-16 12:14:48 字數 2498 閱讀 7578

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...