python 爬取 博客園 接 螞蟻學pythonP5生產者消費者爬蟲數據重覆問題 先看訪問地址 訪問地址是https://www.cnblogs.com/#p2 但是實際訪問地址是https://www.cnblogs.com 說明其中存在貓膩;像這種我們給定指定頁碼,按理應該是 post 請求才 ...
python 爬取 博客園 接 螞蟻學pythonP5生產者消費者爬蟲數據重覆問題
-
先看訪問地址
-
訪問地址是
https://www.cnblogs.com/#p2
但是實際訪問地址是https://www.cnblogs.com
說明其中存在貓膩;像這種我們給定指定頁碼,按理應該是 post 請求才對;於是乎 往下看了幾個連接
-
然後再看一下payload 發現這個post 請求 才是我們想要的鏈接 其中
PageIndex
就是我們要設置的頁數
-
-
代碼擼起來
# Author: Lovyya # File : blog_spider import requests import json from bs4 import BeautifulSoup import re # 這個是為和老師的urls一致性 匹配urls裡面的數字 rule = re.compile("\d+") urls = [f'https://www.cnblogs.com/#p{page}' for page in range(1, 31)] # pos請求網址 url = "https://www.cnblogs.com/AggSite/AggSitePostList" headers = { "content-type": "application/json", "user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.30" } def craw(urls): #idx 是'xxx.xxxx.xxx/#p{num}' 裡面的num 這樣寫可以不用改 後面生產者消費者的代碼 idx = rule.findall(urls)[0] # payload參數 只需要更改 idx 就行 payload = { "CategoryType": "SiteHome", "ParentCategoryId": 0, "CategoryId": 808, "PageIndex": idx, "TotalPostCount": 4000, "ItemListActionName": "AggSitePostList" } r = requests.post(url, data=json.dumps(payload), headers=headers) return r.text def parse(html): # post-item-title soup = BeautifulSoup(html, "html.parser") links = soup.find_all("a", class_="post-item-title") return [(link["href"], link.get_text()) for link in links] if __name__ == '__main__': for res in parse(craw(urls[2])): print(res)