來獲取,而閱讀數則要麻煩些,是第三個
通過以下代碼就可以獲取到以上到相關信息:
上述代碼就是主要的獲取相關信息的邏輯,因為閱讀數沒有唯一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=ajaxhttps://www.oschina.net/blog/widgets/_blog_index_recommend_list?classification=428640&p=2&type=ajaxhttps://www.oschina.net/blog/widgets/_blog_index_recommend_list?classification=428640&p=3&type=ajaxhttps://www.oschina.net/blog/widgets/_blog_index_recommend_list?classification=428640&p=4&type=ajaxhttps://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 的文章