python爬虫爬取博客园
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)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)