當前位置:
首頁 > 知識 > Python爬蟲學習筆記總結(二)

Python爬蟲學習筆記總結(二)

五 資料庫存儲爬取的信息(MySQL)

爬取到的數據為了更好地進行分析利用,而之前將爬取得數據存放在txt文件中後期處理起來會比較麻煩,很不方便,如果數據量比較大的情況下,查找更加麻煩,所以我們通常會把爬取的數據存儲到資料庫中便於後期分析利用。

這裡,資料庫選擇MySQL,採用pymysql這個第三方庫來處理python和mysql資料庫的存取,python連接mysql資料庫的配置信息

以爬取簡書首頁文章標題以及url為例,先分析抓取目標信息,

如上圖,文章題目在a標籤中,且url(href)只含有後半部分,所以在存儲的時候,最好把它補全。

mysql:新建一個資料庫pytest,建立一張名為titles的表,表中欄位分別為id(int自增),title(varchar),url(varchar),如下:

進行資料庫操作的思路為:獲得資料庫連接(connection)->獲得游標(cursor)->執行sql語句(execute)->事物提交(commit)->關閉數據據庫連接(close),具體代碼實現如下:

代碼執行結果:


六、Scrapy初體驗

之前大概學習了下通過urllib和Beautiful Soup 進行簡單數據爬取的流程,但是那隻適用於一些簡單的、數據量比較小的爬蟲項目,如果需要爬取的數據量比較大的話,之前的方法必定非常緩慢,所以就有了Scrapy,Scrapy是一個快速的web抓取框架,可抓取web站點並從頁面中提取結構化的數據。Scrapy給我們提供了許多的爬蟲基類,我們可以直接繼承使用,當然,既然Scrapy是一個框架,我們也可以根據自己的需要對它進行修改,下面我們就慢慢來看Scrapy的使用。

(一)安裝(Windows)

Scrapy是純Python編寫的,所以需要一些比較重要的的Python依賴包:

lxml, an efficient XML and HTML parser

parsel, an HTML/XML data extraction library written on top of lxml,

w3lib, a multi-purpose helper for dealing with URLs and web page encodings

twisted, an asynchronous networking framework

cryptography and pyOpenSSL, to deal with various network-level security needs

看著依賴包比較多,其實安裝起來並不複雜,以管理員的身份運行Windows命令提示符,在以安裝Python的前提下,運行:

pip會自動下載相關依賴包,如果順利的話,會直接安裝完成。

要注意的是,確認一下python的版本,pip會根據系統自動安裝相關包,即如果系統是64位的,pip就會安裝64位的包,但是twisted的版本一定要和python的一樣,如果操作系統是64位的,python是32位的,pip直接安裝的twisted安裝就會出錯。

如果pip安裝twisted時出錯,在命令行輸入python,查看本地python版本,然後到這裡下載和python版本相同的whl文件,使用pip install xxx.whl安裝,完成後再執行一遍pip install scrapy即可。

在命令行輸入scrapy, 若不報錯,則安裝完成。

(二) 第一個Scrapy項目

照例,先上官方文檔 1.3,找了一下網上翻譯的文檔都是0.24或者0.24版,所以建議大家還是看官方最新的英文版比較好。

打開命令提示符,進入想要創建項目的目錄,運行

scrapy startproject scrapyTest

項目創建完成,讓我們來看一下項目結構,執行:

tree /f

進入spiders目錄,新建test_spider.py如下:

在命令行輸入

結果如下:

上述代碼Scrapy為start_requests 中的每個URL創建了scrapy.Request對象,並將 parse() 方法作為回調函數(callback)賦值給了Request(Scray中parse()為默認回調方法)。


七 Scrapy小例子

之前我們知道了Scrapy中每個文件所代表的含義,這次我們就以爬取拉勾網Python相關招聘信息來具體演示下Scrapy每個文件的用法。

我們要做的是,將拉勾網以『Python』為關鍵字搜索到的招聘信息前五頁爬下來,然後將其中的『職位』、『薪資』、『學歷要求』、『工作地點』、『公司名稱』以及『信息發布時間』提取出來並存儲到MySQL資料庫中。

(一)準備工作

我們先到拉勾網,在技術一欄中點擊Python,得到如下頁面:

點擊下一頁,觀察地址欄URL的變化:

第二頁的URL

https://www.lagou.com/zhaopin/Python/2/?filterOption=2

我們可以發現,頁碼的變化體現在URL中的兩個數字上,由此,我們便可以得到我們需要爬取的5個頁面的URL分別為:

整理好需要爬取的URL後,我們來按F12打開開發者工具,找我們需要提取的信息:

可以看到需要爬取的信息都在

標籤中沒,右鍵複製一個li標籤,整理一下格式,得到如下代碼:

可以發現,

標籤屬性中有我們需要的』職位『、』薪資『、』公司名稱『,而』工作地點『、』學歷要求『和』信息發布時間『則在下面的各個標籤中,於是我們可以使用如下代碼,提取各個信息(Beautiful Soup):

(二)資料庫的創建

先來建好資料庫,這裡使用的是MySQL資料庫,建立如下:

要注意的是,其中的id屬性設為自增,』salary『屬性設為int類型,方便以後進行數據分析統計。

(三)代碼編寫

準備工作完成了,下面開始代碼部分,先到工作目錄中建立工程,在命令行中:

先編輯items.py文件,該文件是一個簡單的數據收集容器,用於保存爬蟲爬取的數據,類似一個字典:

在spiders中建立爬蟲文件lg_spider.py如下:

爬取的item被收集起來後,會被傳送到pipelines中,進行一些處理,下面開始編輯pipelines.py用於將爬取的數據存入MySQL資料庫,

最後,再來配置settings.py文件,打開settings.py文件,會發現其中有很多注釋,我們找到

它代表使用使用指定的pipeline,將其修改為如下格式:

OK。所有工作都完成了,我們來執行一下爬蟲看一下效果;

刷新一下資料庫:

現在我們就可以通過sql語言,進行簡單的數據統計,如找出所有最低工資高於10000的招聘信息:

select * FROM info01 WHERE salary>10000


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 python 的精彩文章:

如何用 Python 讀取 Outlook 中的電子郵件
Python web開發:Flask的URL和視圖

TAG:python |