python 抓取開源中國上閱讀數大於 1000 的優質文章
Python 現在越來越火,連小學生都在學習 Python了 ^ ^,為了跟上時代,趕個時髦,秉承活到老學到老的精神,慢慢也開始學習 Python;理論是實踐的基礎,把 Python 相關語法看了,就迫不及待,大筆一揮來個 Hello world 壓壓驚,理論終歸是理論,實踐還是要要的嘛,動手了之後,才能更好的掌(chui)握(niu)基(bi)礎;發車了..........
首先瀏覽器輸入 https://www.oschina.net/ 進入開源中國官網,點擊頂部導航欄的 「博客」 選項進入博客列表頁面,之後點擊左側 「服務端開發與管理」 選項,我們要爬取的是服務端相關的文章,如下圖所示:
接下來分析文章列表的布局方式,按 F12 打開調試頁面,如下所示:
可以看到,一篇文章的相關信息就是一個 div, class 屬性為 item blog-item,打開該 div,如下:
我們要抓取的是文章的標題,描述,URL,和閱讀數,標題和URL可以通過 a 標籤來獲取,描述通過 來獲取,而閱讀數則要麻煩些,是第三個
,
通過以下代碼就可以獲取到以上到相關信息:
上述代碼就是主要的獲取相關信息的邏輯,因為閱讀數沒有唯一id,或者 class ,所有可以通過find_next_sibling來獲取兄弟節點;
接下來就對獲取到到文章進行處理,如按照閱讀數大於等於1000過濾文章,並按照閱讀數從高到低低排序,並且寫到文件中:
首先要定義一個文章類,用來表示文章的相關信息,如下:
之後,定義文章的處理類OschinaArticle,相關處理邏輯在該類中實現:
接下來獲取BeautifulSoup對象:
之後,通過BeautifulSoup來解析 HTML 頁面,獲取文章相關信息,之後,根據相關信息創建文章對象,放到集合中進行返回:
因為文章的閱讀數如果超過 1000 的話,就用 K 來表示,為了在後面篩選指定閱讀數的文章,所以需要進行處理,把 K 轉換為 1000,代碼如下:
接下來就是文章根據閱讀數進行篩選和排序了,篩選出閱讀數大於等於指定值並且按照閱讀數從高到低排序,代碼如下:
以上就可以獲取到我們想要的文章信息了,此外,我們可以把信息寫到文件文件中,代碼如下:
之後,把上面的方法整合在一起,代碼如下:
main 方法測試一下,地址輸入:https://www.oschina.net/blog?classification=428640, 文章閱讀數要大於等於1000
控制台日誌列印如下:
寫入到文件中的內容如下:
你以為到這裡就完了嗎,no, no, no.............,通過上述方式只能獲取到首頁的文章,如果想獲取更多的文章怎麼辦?開源中國的博客文章列表沒有分頁,是通過滑動滑鼠滾輪來獲取更多的頁,可是人家的地址導航欄卻沒有絲毫沒有變動,但是可以通過 F12 來看呀,按 F12 後,通過 NetWork 來查看相關的請求和響應情況:
通過滾動幾下滑鼠滾輪之後,可以發現請求的 URL 還是有規律的:
https://www.oschina.net/blog/widgets/_blog_index_recommend_list?classification=428640&p=2&type=ajax
https://www.oschina.net/blog/widgets/_blog_index_recommend_list?classification=428640&p=2&type=ajax
https://www.oschina.net/blog/widgets/_blog_index_recommend_list?classification=428640&p=3&type=ajax
https://www.oschina.net/blog/widgets/_blog_index_recommend_list?classification=428640&p=4&type=ajax
https://www.oschina.net/blog/widgets/_blog_index_recommend_list?classification=428640&p=5&type=ajax
可以看到除了 p 的參數值不同的話,其他的都相同,p 就是分頁標識,p=2就表示第二頁,p=3就等於第三頁,以此類推,就可以獲取到更多的文章啦:
測試:
日誌控制台列印如下:
寫到文件中如下:
可以看到,在 1-20 頁中,閱讀數大於等 1000 的文章有 114 篇,之後就可以 copy URL 到地址欄進行閱讀啦....................
完整代碼如下:
OschinaArticle 處理邏輯類:
※世界盃:用Python分析熱門奪冠球隊
※Python NLP庫top6的介紹和比較
TAG:python |