技術棧:Python+Selenium/Scrapy框架+Tor(代理)
大家好,今天我帶來的主題叫做一個小爬蟲的整體解決方案,其實一開始決定做這個主題的時候,主要是覺得在團隊中,我有這樣一個機會可以完成之前想做但是沒能做的事情,就想拿出來和大家分享這個技術,這樣以后大家遇到此類問題或者想去研究爬蟲的時候,能夠少走一些彎路和少踩一些坑,同樣的,我也希望大家也能把自己覺得可以分享的技術,拿出來大家一起探討,好吧,那我就先拋個磚,希望能把大家的玉都引出來。如果在講解的過程中,大家有任何的疑問,隨時可以打斷我進行交流,如果我不會的,我下來尋求了答案,大家再一起交流,好吧,那我就先開始今天的主題。
說到爬蟲,我想大家都不會陌生,我找了一段百度百科對於爬蟲的定義:網絡爬蟲(又稱為網頁蜘蛛,網絡機器人,在FOAF社區中間,更經常的稱為網頁追逐者),是一種按照一定的規則,自動地抓取萬維網信息的程序或者腳本。另外一些不常使用的名字還有螞蟻、自動索引、模擬程序或者蠕蟲。簡單的說就是用程序去獲取網站數據,這里的數據包括網頁代碼和服務器返回的數據,我們把獲取到的數據進行保存和分析。關於這些理論的東西網上都能很容易查到,而且都是仁者見仁智者見智,大家可以自己上網去查看。那么我們如何用程序來制作爬蟲呢?從拿到這個項目之初,我查閱了一些資料,也請教了有過爬蟲經驗的Peter,最終大概定了一個項目的技術棧,就是用Python語言+Selenium/Scrapy框架+Tor(代理)進行項目開發。
說到爬蟲的開發語言,我一直以為Python是專門做爬蟲的,后來這次我正好也去了解了下,才發現其實Python本身也是一門程序語言,和Java,.Net一樣可以做任何高級語言能做的事情,比如Web開發、人工智能、桌面界面開發、后端開發,當然爬蟲只是其中技能之一,所以其實如果想通過這一個項目就把Python學習,那就可以出門右轉了,當然如果有其它語言基礎的加成,可以讓我們更好的了解熟悉python語法,便於我們進行快速開發,所以我大概花了2個小時左右的時間熟悉了一下python語法,結合在后面做爬蟲用到的一些高頻語法,我選取了幾個知識點和javascripy做一下對比,一定意義上來說python屬於后端語言,和javascripy不能放在一起類比,但是即便如此,其實也能看到編程語言的一些共通性,所以我還是很厚臉皮的拿來比較。
首先安裝python:
1、windows下安裝python和pip,安裝python.exe,然后加入環境變量。
2、Linux安裝python3和pip3,主要是講下默認python和python3之間的關系,在后面部署雲的時候再講。
相同的:對象和數組的引用、函數和class,import引入
不同的:
1、if-else語法
2、判斷是否包含字符串
3、字符不能和數字直接相加,要用str轉
4、數組相加,js相加成了字符串,python可以數組直接相加生成新的數組
5、數組的截取,js是用slice,python是用[:]
當然python是一門比較博深的語言,上面只是其中的幾個點,如果有興趣的同事可以去再仔細研究,在這里我們就不做過多的交流,當我們把python語法了解了之后,我就在想我應該如何選擇一個框架去承載爬蟲,這個時候我和測試Zalen交流了下,感覺可以從Selenium入手,因為Selenium主要還是做自動化測試這塊的東西,我也本着多學習不吃虧,不懂就去打個擦邊球的心態,想把Selenium當作第一塊骨頭來啃,Selenium的定義主要還是一個自動化測試工具,因為可以模擬瀏覽器的操作,所以也可以做一些比較復雜的爬蟲功能,比如說我們需要通過對瀏覽器進行比較復雜的交互才能獲取到的爬蟲數據,我們就可以通過Selenium來進行爬蟲,Selenium可以幫助我們啟動一個瀏覽器進行交互,下面我就來簡單演示一個Selenium的程序,大家一看便知。Selenium還有一個比較好的優勢就是可以爬一些動態加載數據的網頁,這個我們可以把后面的Scrapy講了一起再來對比。大家都看剛才的例子有沒有發現,其實就算我們用無頭瀏覽器的方式,Selenium的效率其實也是比較低的,那么我又去搜索了專門做爬蟲的框架,經過粗略的對比,最終選擇了Scrapy作為開發框架,當然也還有其他很多好的框架可以選擇,如果有興趣,我們也可以在后面進行交流。
下面我們來大概聊一下Scrapy,Scrapy 是一套基於Twisted的異步處理框架,純python實現的爬蟲框架,用戶只需要定制開發幾個模塊就可以輕松的實現一個爬蟲,用來抓取網頁內容以及各種圖片。下面我們來演示一下如何在本地建立一個Scrapy項目,1、安裝python環境;2、安裝pip;3、pip install scarpy;(python版本>=3.5)4、scrapy startproject bookSpider,就完成了Scrapy項目的創建。
然后我們來看一下Scrapy的項目結構,主要就是settings.py,items.py,pipelines.py,然后就是spiders文件夾的內容,這里也是主要寫爬蟲的文件,在我們大概了解了項目目錄之后,我們需要再來了解一下scrapy的運行原理和流程,
https://blog.csdn.net/qq_34120459/article/details/86711728
Scrapy是單item存數據庫,結合和我自己為什么要在spider進行多條數據的存儲一起傳分析說明。
擴展知識:Tor(洋蔥網絡)的使用,Tor的定義:Browse Privately.
Explore Freely.Defend yourself against tracking and surveillance. Circumvent censorship.(私密瀏覽.自由探索.防止你被追蹤和監視。避開網絡審查。)我們在進行頻繁請求造成被對方服務器封掉IP的時候,我們可以通過使用Tor來隱藏我們真實ip,並分配給我們一個通過幾層代理轉換過的外網ip重新請求。下面我們就來說如果運用Tor.
1、windows安裝tor:
1)下載Tor源碼:https://www.torproject.org/download/;
2)下載Vidalia圖形界面化工具來使用Tor,下載地址(vidalia-standalone-0.2.21-win32-1_zh-CN.exe):https://people.torproject.org/~erinn/vidalia-standalone-bundles/
打開vidalia軟件,設置tor路徑,就是第1步下載解壓出來的tor.exe文件。然后就可以連接網絡了。當連接成功之后,我們就可以更換身份,這里有一點需要注意的是國內網絡使用Tor必須要先FQ。
下載http代理軟件Polipo(polipo-1.1.0-win32.zip):http://www.pps.univ-paris-diderot.fr/~jch/software/files/polipo/
編輯解壓后的文件config.sample在文件的開頭加上以下配置:
socksParentProxy = "localhost:9050"
socksProxyType = socks5
diskCacheRoot = ""
使用cmd命令運行該目錄下的程序:polipo.exe -c config.sample
通過系統代理設置localhost:8123
通過https://check.torproject.org/或者http://icanhazip.com/驗證ip地址。
2、Linux安裝Tor
pip install tor;pip install privoxy;
最后我們來把項目部署上雲服務器:
1、yum install git 、git clone XXXX
2、pip install scrapy
3、pip install bs4;pip install stem;pip install requests;pip install pysocks
4、scrapy crawl spider-name或者運行定時任務。
5、Over!!!