標籤:app compile 表達 imp x64 內建函數 class 部落格 info
首先進入部落格園的管理頁面:
通過觀察A-JAX請求,發現部落格的分類(categories)是一個json格式的資料即:
於是先爬取categories。通過各個分類的頁面進而爬去地址,瀏覽量,開啟一個category的頁面:
檢查網頁
這樣就得到了每個部落格的地址和瀏覽量了
上代碼,其他一些問題在代碼中給出注釋:
import timeimport requestsimport jsonimport refrom selenium import webdriverurl = ‘https://i.cnblogs.com/categories‘base_url = ‘https://i.cnblogs.com/posts?‘views = 0url_list = []headers = { #在headers中添加上自己的cookie ‘cookie‘: ‘你自己的cookie‘,‘user-agent‘: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36‘, ‘upgrade-insecure-requests‘: ‘1‘}pattern1 = re.compile(‘<td>發布</td>.*?\d.*?(\d{1,})‘, re.S) #Regex #這邊尤其要注意到瀏覽量有可能不只是一個位元,還可能是二位元三位元,所以寫正則的時候應該是(\d{1,})pattern2 = re.compile(‘<td class="post-title"><a href="(.*?)"‘, re.S) #Regexresponse = requests.get(url=url, headers=headers)html = response.textdata = json.loads(html) #通過json.loads把資料轉化成字典格式categories = (i[‘CategoryId‘] for i in data)for category in categories: cate_url = base_url + ‘categoryid=‘ + str(category) #build每個category的地址 headers[‘referer‘] = cate_url response = requests.get(cate_url, headers=headers) html = response.text results1 = re.findall(pattern1, html) #瀏覽量的findall結果 results2 = re.findall(pattern2, html) #網頁地址的findall結果 if results1: for result1 in results1: views = views + int(result1) #通過int()內建函數,把string格式的數字轉化為int格式的數值,計算瀏覽量 for result2 in results2: url_list.append(‘https://‘ + result2) #build地址print(‘總瀏覽量為:‘, views)print(url_list)options = webdriver.ChromeOptions() #通過selenium 模組中的webdriver 類比一個chrome瀏覽器#設定中文options.add_argument(‘lang=zh_CN.UTF-8‘)#更換頭部options.add_argument(‘user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36"‘)#https://www.cnblogs.com/francischeng/p/9437809.html#www.cnblogs.com/francischeng/p/9437809.com‘driver = webdriver.Chrome(chrome_options=options)while True: for url in url_list: driver.delete_all_cookies() driver.get(url) time.sleep(2) #睡眠兩秒
總結。
1.主要遇到的錯誤是,Regex中爬取瀏覽量的問題,剛開始唯寫了(\d),也就是一個數字。然而瀏覽量可能是二位元三位元,所以應該改成(\d{1,})這樣可以爬取多位的數字。
2.通過單純的類比瀏覽器並不能刷瀏覽量,可能一個ip一天只能增加幾個瀏覽量
python 爬蟲 計算部落格園瀏覽量,刷瀏覽量