最近有好人相助,重新拾起了爬蟲
爬爬爬爬爬爬爬…
本次爬蟲用了之前學一半就半途而廢的scrapy,上次用到爬蟲感覺是一兩年前的事了,現在已經是學校的老油條了,年齡大了就容易健忘,重新去學這些東西真是廢了不少功夫,現在做的差不多了,就寫點東西記錄一下,防止以後忘了自己做過爬蟲這件事。
之前用爬蟲,就是利用request
下載網頁,然後解析,使用re
做pattern然後去find_all
,之後學了一點scrapy,但是後來的後來就沒用過這個東西做過什麼實際的玩意,這次接到任務,想想就用scrapy吧。
太久沒學了,我是從官網的Scrapy Tutorial入手的,不要害怕英語呢,其實沒這麼難,而且我是看懂英語然後真正地實現了就有一種自豪感哈哈哈哈哈,這樣也可以在遇到問題之後在更大的平臺交流(這段時間還給國外一作者發郵件也是成就滿滿)
遇到問題我十分推薦大家想到什麼搜什麼(當然可能會浪費大量的時間,對於我就是少打兩把王者了),查一查,真的是:只有想不到,沒有做不到
所以,搜索真的很有很有必要,自己造輪子實在太難了
再來講講爬蟲本身吧,本次我爬取了四個網站(The NewYork Times, The Washington Post,Los Angeles Times, Chicago Tribune),但是說實話,本次做的不好的是,我也沒看過別人的爬蟲項目,我也不知道我這樣的方式是不是正確 >>>>>
-
文本提取
-
元素採集
在瞭解了基本的scrapy的使用之後,我的流程仍是 解析網頁->查找元素->獲取信息->保存記錄
唯一不同的是本次使用了xpath
和css
方法,這很大程度提高了效率,但是要指出的是我不是科班出身,對於網頁的構成我是不懂的,一直只能照貓畫虎,在xpath
和css
的使用中,我發現元素似乎不能隔層查找。
想法是這樣,第一個xpath
進行了粗定位,其中含有幾個我想要的信息,第二個不同的xpath
進行不同的查找,但是這樣都不能奏效,這種原因我分析不太來,因此只能又回到了re
模塊。
這裏也嚴重吐槽有些網站時間戳都不能統一一個格式,也真是簡直了,還得一個一個找再一個一個改。
-
網站分析
本次主要是在The Washington Post上出了很大的問題,利用scrapy的request
是不能得到相應的元素,必須動用webdriver
,但是每次瀏覽器自動出現真的讓人很頭大,可是很有意思的是-headless
模式下又不能正常工作,我搜到的有說是因爲User-Agent
的緣故,但是我又不知道怎麼修改User-Agent
。所以也就只能使用正常模式下勉勉強強過日子。
模擬點擊也是一個很有意思的過程,感覺最專業的利用get
和post
,可是依然我都沒有實現,我採用了webdriver
的find_element_by_xpath
進行定位並使用了click
方法。
這裏還要再提出一點是,我還主動修改了webdriver.support.ui.WebDriverWait
來滿足我的等待時間需求,這也是極度有意思的事情。還有的是help是相當好用的內置函數,多看看源碼也是最吼的! -
文本分析
本次項目實際上查找一個主題,然後在時間上進行統計,但是爬取的文章總要進行篩選,自然而然的,因爲學過機器學習這一類的東西,人工智能當然酷炫狂暴拽了!
- 判斷文章是不是的主體是不是我們想要的。
- 文章與提供的關鍵詞文檔相似度的計算
從上圖中就可以知道爲什麼我們要進行對主體的判斷==>各大網站提供的內容是寬泛的,
以上圖爲例,我們其實想要的是主體是‘兔子’和‘吃草’,但是難免會得到一些相近又確實不是我們想要的,那麼就必須經過篩選。我的方法十分簡單,就是一篇文章,'兔子'
和'吃草'
這兩個詞彙出現超過一定次數則保留。通過檢查,這個效果還是不錯的。
而相似度篩選中,我們預先找了一些關鍵詞彙比如:
利用TF-IDF進行了相似度計算,記錄相似度,大概的圖形如下:
那麼有了相關係數怎麼確定我們想要的:
- 從這張圖直觀地看,從斜率開始迅速增加的點,我認爲是一個臨界點,之後的相關係數雖然頭尾相差大,但我覺得其實也就是一兩個詞彙的問題,還有文章長短的影響等等
- 實際上我是自己進行人工篩選的,從相關係數的逐級向上挑選最終確定結果,因爲篇數不多,要求的精確度也不高,反而覺得這個方法比1要好。
以上就是我的文本分析的過程,但要值得提出的是,上述的方法不是一口氣的想好的,對於主體篩選的流程,就是在計算好相關係數,一篇一篇看,發現某些文章明明主體不是兔子
但是得到的分數很高,然後慢慢慢慢找原因,最終有了這樣的方法
總結
這個項目對我來說大概分爲了兩個內容:爬取和分析,這裏再總結下感想。
- 動腦想,網上搜,再動手
- 能看懂網頁的元素很重要,
xpath
css
re
等等選擇器都是好方法 - 膽子一定要大,幹就是了!大不了重新擼
- 想法很美好,現實很殘酷。實用就好
- 不着急,一步一步來就會做的更好
謝謝!