爬蟲及文本分析心得(For The NewYork Times, The Washington Post,Los Angeles Times, Chicago Tribune)

最近有好人相助,重新拾起了爬蟲
爬…


本次爬蟲用了之前學一半就半途而廢的scrapy,上次用到爬蟲感覺是一兩年前的事了,現在已經是學校的老油條了,年齡大了就容易健忘,重新去學這些東西真是廢了不少功夫,現在做的差不多了,就寫點東西記錄一下,防止以後忘了自己做過爬蟲這件事。


之前用爬蟲,就是利用request下載網頁,然後解析,使用re做pattern然後去find_all,之後學了一點scrapy,但是後來的後來就沒用過這個東西做過什麼實際的玩意,這次接到任務,想想就用scrapy吧。

太久沒學了,我是從官網的Scrapy Tutorial入手的,不要害怕英語呢,其實沒這麼難,而且我是看懂英語然後真正地實現了就有一種自豪感哈哈哈哈哈,這樣也可以在遇到問題之後在更大的平臺交流(這段時間還給國外一作者發郵件也是成就滿滿)

遇到問題我十分推薦大家想到什麼搜什麼(當然可能會浪費大量的時間,對於我就是少打兩把王者了),查一查,真的是:只有想不到,沒有做不到

這樣做行不行.......哇,這都能行。
徹徹底底貫穿了我整個爬蟲項目

所以,搜索真的很有很有必要,自己造輪子實在太難了


  再來講講爬蟲本身吧,本次我爬取了四個網站(The NewYork Times, The Washington Post,Los Angeles Times, Chicago Tribune),但是說實話,本次做的不好的是,我也沒看過別人的爬蟲項目,我也不知道我這樣的方式是不是正確 >>>>>

  • 文本提取

  • 元素採集

  在瞭解了基本的scrapy的使用之後,我的流程仍是 解析網頁->查找元素->獲取信息->保存記錄

  唯一不同的是本次使用了xpathcss方法,這很大程度提高了效率,但是要指出的是我不是科班出身,對於網頁的構成我是不懂的,一直只能照貓畫虎,在xpathcss的使用中,我發現元素似乎不能隔層查找。

  想法是這樣,第一個xpath進行了粗定位,其中含有幾個我想要的信息,第二個不同的xpath進行不同的查找,但是這樣都不能奏效,這種原因我分析不太來,因此只能又回到了re模塊。

 這裏也嚴重吐槽有些網站時間戳都不能統一一個格式,也真是簡直了,還得一個一個找再一個一個改。

  • 網站分析
     本次主要是在The Washington Post上出了很大的問題,利用scrapy的request是不能得到相應的元素,必須動用webdriver,但是每次瀏覽器自動出現真的讓人很頭大,可是很有意思的是-headless模式下又不能正常工作,我搜到的有說是因爲User-Agent的緣故,但是我又不知道怎麼修改User-Agent。所以也就只能使用正常模式下勉勉強強過日子。
     模擬點擊也是一個很有意思的過程,感覺最專業的利用getpost,可是依然我都沒有實現,我採用了webdriverfind_element_by_xpath進行定位並使用了click方法。
     這裏還要再提出一點是,我還主動修改了webdriver.support.ui.WebDriverWait來滿足我的等待時間需求,這也是極度有意思的事情。還有的是help是相當好用的內置函數,多看看源碼也是最

  • 文本分析
     本次項目實際上查找一個主題,然後在時間上進行統計,但是爬取的文章總要進行篩選,自然而然的,因爲學過機器學習這一類的東西,人工智能當然了!

然並卵...
 我最終只是根據提供的關鍵詞文本與爬取的文章進行了以下計算
  1. 判斷文章是不是的主體是不是我們想要的。
  2. 文章與提供的關鍵詞文檔相似度的計算
搜索'兔子吃草'
相似度篩選
爬蟲程序
爬取的文章
狼怎麼吃正在吃草的兔子
兔子爲什麼愛吃草
兔子吃哪些草
鷹怎麼抓不吃草的兔子
兔子吃草
結果

 從上圖中就可以知道爲什麼我們要進行對主體的判斷==>各大網站提供的內容是寬泛的,
 以上圖爲例,我們其實想要的是主體是‘兔子’和‘吃草’,但是難免會得到一些相近又確實不是我們想要的,那麼就必須經過篩選。我的方法十分簡單,就是一篇文章,'兔子''吃草'這兩個詞彙出現超過一定次數則保留。通過檢查,這個效果還是不錯的。
 而相似度篩選中,我們預先找了一些關鍵詞彙比如:

兔子除了草還吃蘿蔔
兔子吃紫甘藍
兔子吃青青草原
.......

 利用TF-IDF進行了相似度計算,記錄相似度,大概的圖形如下:
相關係數計算,前面大部分的零是因爲在主體篩選中將其濾去,強制爲零

圖 相關係數
前面大部分的零是因爲在主體篩選中將其濾去,強制爲零

 那麼有了相關係數怎麼確定我們想要的:

  1. 從這張圖直觀地看,從斜率開始迅速增加的點,我認爲是一個臨界點,之後的相關係數雖然頭尾相差大,但我覺得其實也就是一兩個詞彙的問題,還有文章長短的影響等等
  2. 實際上我是自己進行人工篩選的,從相關係數的逐級向上挑選最終確定結果,因爲篇數不多,要求的精確度也不高,反而覺得這個方法比1要好。

以上就是我的文本分析的過程,但要值得提出的是,上述的方法不是一口氣的想好的,對於主體篩選的流程,就是在計算好相關係數,一篇一篇看,發現某些文章明明主體不是兔子但是得到的分數很高,然後慢慢慢慢找原因,最終有了這樣的方法


總結

這個項目對我來說大概分爲了兩個內容:爬取和分析,這裏再總結下感想。

  • 動腦想,網上搜,再動手
  • 能看懂網頁的元素很重要,xpath css re等等選擇器都是好方法
  • 膽子一定要大,幹就是了!大不了重新擼
  • 想法很美好,現實很殘酷。實用就好
  • 不着急,一步一步來就會做的更好

謝謝!

github入口

發佈了8 篇原創文章 · 獲贊 8 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章