社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

蚂蚁学Python • 4 年前 • 1114 次点击  

前言

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

需求

下面我们来明确一下需求 爬取博客园前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,有答疑服务,也会进接单群
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/123884