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 讀取 Outlook 中的電子郵件
※Python web開發:Flask的URL和視圖
TAG:python |