經常在CSDN博客裏查找文章,但是系統裏一直沒有找到結果按文章閱讀數排序的方法。因此自己寫個簡單的小爬蟲腳本,輸入要查找的關鍵字和想要獲取的條目,打印出排名前幾的博客網址。
當前是第一版本,支持輸入兩個參數:搜索關鍵字和期待結果數目, 屏幕上打印出閱讀數排名前幾的博客網址。
後續版本計劃更新:
1. 第一頁之後的結果遍歷,當前只處理第一頁的搜索結果
2. 不帶閱讀數的結果項解析,有些結果表項沒有閱讀數信息,需要打開博客去解析閱讀數
3. 健壯性保護:
I. 增加輸入參數合法性校驗
II. 網頁加載超時異常處理
III. 元素找不到異常處理
IV. xxx
4. help命令添加
5. 反爬蟲機制
import sys
import time
import re
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
class Csdn():
def __init__(self, searchStr, displayCount):
self.searchStr = searchStr
self.displayCount = displayCount
self.retList = []
options = Options()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
options.add_argument('log-level=3')
self.driver = webdriver.Chrome(executable_path=r'C:\softPackage\chromedriver_win32\chromedriver.exe', options=options)
def sortResult(self):
def sortKey(item):
counts = re.findall(r"\d+", item[0])
return int(counts[0])
self.retList.sort(key=sortKey, reverse=True)
def desplayResult(self):
if self.displayCount > len(self.retList):
self.displayCount = len(self.retList)
for retItem in self.retList[:self.displayCount]:
print("%10s"%retItem[0], retItem[1])
def run(self):
driver = self.driver
driver.get('https://blog.csdn.net/')
driver.find_element_by_id('toolber-keyword').send_keys(self.searchStr)
driver.find_element_by_id('toolber-keyword').send_keys(Keys.RETURN)
time.sleep(1)
handles = driver.window_handles
driver.switch_to.window(handles[-1])
items = driver.find_elements_by_xpath("//dd[@class='author-time']")
# 作者: hpu11 日期:2018-06-07 https://blog.csdn.net/hpu11/article/details/80609571 225次閱讀
for item in items:
strs = item.text.split()
self.retList.append((strs[4], strs[3]))
self.sortResult()
self.desplayResult()
driver.quit()
if __name__ == '__main__':
searchStr = sys.argv[1]
displayCount = int(sys.argv[2])
csdn = Csdn(searchStr, displayCount)
csdn.run()
結果顯示如下: