Python爬虫,爬取博客园文章列表

共 1829字,需浏览 4分钟

 ·

2021-12-11 12:50

前言

本次的案例源自于蚂蚁老师的爬虫课程。但由于博客园网站作了升级,所以蚂蚁老师的示例代码失效了,我根据蚂蚁老师教授的知识结合网上搜索来的资料,重新编写了一份代码,复现了蚂蚁老师在课程中的演示效果。

需求

下面我们来明确一下需求 爬取博客园前20页的文章标题、对应的文章链接以及对应的点赞数 如图所示 网站分页设置

查看网站的html代码

整体分析

通过浏览器内置的查看网络部分,我们发现了点击分页时,实际请求的url并不是浏览器输入框中的信息,而是:https://www.cnblogs.com/AggSite/AggSitePostList

找到对应的请求部分 可以发现,对应的content-type信息,以及user-agent信息 我们将这俩信息对应放到代码的header部分,作为一个请求头附入request里面,模拟浏览器,防止网站的反爬虫措施干扰。另外,为了将爬虫伪装得更加像是一个浏览器,可以将请求负载也加到request中

局部分析

下面我们来找具体的信息藏在哪里 鼠标右键对应的内容,查看html代码,就可以发现如下内容

文章标题和url链接 点赞数

现在我们就可以根据前面的分析写代码了

代码编写

为了演示,我的代码只爬取了前3页的内容,如果你想要爬200页,可自行修改代码

"""
爬取前20页的文章标题、链接、点赞数
"
""
import requests
from bs4 import BeautifulSoup
import re
import json

for idx in range(1, 3):
 print("#" * 30, idx)
 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"}

 request_payload = {"CategoryType""SiteHome""ParentCategoryId": 0, "CategoryId": 808, "PageIndex": idx, "TotalPostCount": 4000, "ItemListActionName""AggSitePostList"}

 r = requests.post(url, data=json.dumps(request_payload), headers=headers)
 if r.status_code != 200:
  print(r.status_code)
  raise Exception()
 soup = BeautifulSoup(r.text, "html.parser")
 section_list = soup.find_all("section", class_="post-item-body")
 for section in section_list:
  a_tag = section.find("a", class_="post-item-title")
  passage_link = a_tag.get("href")
  passage_name = a_tag.get_text()

  span_tag = section.find("span", id=re.compile(r"^digg"))
  numbers = span_tag.get_text()

  print(passage_link, passage_name, numbers)

运行结果


最后,推荐下蚂蚁老师的《零基础学Python到数据分析实战课程》


如果购买课程,加蚂蚁老师微信ant_learn_python,有答疑服务,也会进接单群
浏览 30
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报