爬虫实战(黑马论坛)

1.定位爬取位置内容:

# -*- coding: utf-8 -*-
import requests
import time
import re# 请求的 URL 和头信息
url = 'https://bbs.itheima.com/forum-425-1.html'
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36',
}# 发起请求并等待 5 秒
response = requests.get(url, headers=headers)
time.sleep(5)print(response.text)
# 使用正则表达式提取文章标题,发布时间,文章作者
# 文章标题:(关于Django项目《美多商城》的全部流程(下)--从购物车到部署)</a>]</em> <a href="http://bbs.itheima.com/thread-426625-1-1.html" onclick="atarget(this)" class="s xst">关于Django项目《美多商城》的全部流程(下)--从购物车到部署</a>
# 发布时间:(2018-10-28)<a href="http://bbs.itheima.com/home.php?mod=space&amp;uid=468765" c="1"><span style="margin-left: 0;">python_shenshou</span></a><span style="margin-left: 5px;">@ 2018-10-28</span><span style="margin-left: 18px;padding-left: 16px;background: url(/template/gfquan/src/replygf.jpg) no-repeat 0 0;">
# 文章作者: (python_shenshou)<a href="http://bbs.itheima.com/home.php?mod=space&amp;uid=468765" c="1"><span style="margin-left: 0;">python_shenshou</span></a><span style="margin-left: 5px;">@ 2018-10-28</span>

2.正则匹配提取出需要的内容:

import requests
import re# 请求的 URL 和头信息
url = 'https://bbs.itheima.com/forum-425-1.html'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36',
}# 发起请求
response = requests.get(url, headers=headers)if response.status_code == 200:# 使用正则表达式提取文章标题titles = re.findall(r'class="s xst">([^<]+)</a>', response.text)# 提取发布时间和作者details = re.findall(r'<span style="margin-left: 0;">([^<]+)</span></a><span style="margin-left: 5px;">@ ([^<]+)</span>', response.text)authors = [detail[0] for detail in details]dates = [detail[1] for detail in details]# 输出提取的结果for title, date, author in zip(titles, dates, authors):print(f"文章标题: {title}")print(f"发布时间: {date}")print(f"文章作者: {author}")print('-' * 40)
else:print("访问失败", response.status_code)

3.定位翻页进行多页爬取:

import requests
import redef fetch_page(url):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36',}response = requests.get(url, headers=headers)if response.status_code == 200:# 使用正则表达式提取文章标题titles = re.findall(r'class="s xst">([^<]+)</a>', response.text)# 提取发布时间和作者details = re.findall(r'<span style="margin-left: 0;">([^<]+)</span></a><span style="margin-left: 5px;">@ ([^<]+)</span>',response.text)authors = [detail[0] for detail in details]dates = [detail[1] for detail in details]# 输出提取的结果for title, date, author in zip(titles, dates, authors):print(f"文章标题: {title}")print(f"发布时间: {date}")print(f"文章作者: {author}")print('-' * 40)# 使用正则表达式提取下一页的链接next_page_link = re.search(r'下一页', response.text)if next_page_link:return next_page_link.group(1)  # 返回完整的链接else:return Noneelse:print("访问失败", response.status_code)return None# 初始页面
current_url = 'https://bbs.itheima.com/forum-425-1.html'# 循环遍历每一页,直到没有下一页
while current_url:print(f"正在爬取: {current_url}")next_url = fetch_page(current_url)current_url = next_url

4.最后爬取结果:

 

需要注意的地方:其中运用到的正则方法为([^<]+),另一种的正则方法为(.*?),建议第一种,效率更高,但是处理不了'<'字符情况,根据实际情况操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/56571.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【存储设备专栏 2.3 -- 环回设备和块设备区别与联系】

> 请阅读【嵌入式及芯片开发学必备专栏】< 文章目录 环回设备和块设备区环回设备&#xff08;Loop Device&#xff09;定义用途示例 块设备&#xff08;Block Device&#xff09;定义用途示例 区别总结 环回设备和块设备区 在 Linux 系统中&#xff0c;存储设备常通过设…

基于Java实现(PC)大学班级事务管理系统

courseDesign_Java Java 课设 要求 本次设计要求利用 Java 实现 C/S 模式的大学班级内日常事务管理系统&#xff08;PC 版&#xff0c;应用于校内网有线网络访问&#xff0c;暂不开发移动端&#xff09;&#xff0c;不得依赖现有的建模框架&#xff0c;使用 swings 技术完成如…

华为OD机试 - 爱吃蟠桃的孙悟空 - 二分查找(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华为OD刷题交流群&#xff0c;…

决策树和集成学习的概念以及部分推导

一、决策树 1、概述 决策树是一种树形结构&#xff0c;树中每个内部节点表示一个特征上的判断&#xff0c;每个分支代表一个判断结果的输出&#xff0c;每个叶子节点代表一种分类结果 决策树的建立过程&#xff1a; 特征选择&#xff1a;选择有较强分类能力的特征决策树生成…

闯关leetcode——110. Balanced Binary Tree

大纲 题目地址内容 解题代码地址 题目 地址 https://leetcode.com/problems/balanced-binary-tree/description/ 内容 Given a binary tree, determine if it is height-balanced. A height-balanced binary tree is a binary tree in which the depth of the two subtrees…

决策树算法新手入门:从基础理论到Python实现

决策树新手入门详细教程 一、数学基础1. 信息熵(1) 基本定义(2) 条件熵(3) 有关定律 2. 信息增益 二、决策树的组成1. 决策节点2. 叶子节点3. 决策树的深度 三、决策树的建立&#xff08;基于信息增益&#xff09;—— ID31. 计算根节点的信息熵2. 计算属性的信息增益(1) 职业(…

linux之rm使用技巧

对于包含乱码的文件或目录名&#xff0c;在Linux中删除它们可能会有些棘手&#xff0c;但还是可以通过一些方法来实现。下面是一些处理这种情况的方法&#xff1a; 方法1: 使用通配符 如果这些乱码文件或目录的名字有共同的特征&#xff08;例如都是乱码&#xff09;&#xf…

ModuleNotFoundError: No module named ‘pdfminer.high_level‘

解决办法&#xff1a; pip uninstall pdfminer pip install pdfminer.six 如果还报错&#xff1a;重启计算机 参考资料&#xff1a;https://blog.csdn.net/xigewang_/article/details/132319419

【升华】python基础包NumPy学习

NumPy是使用Python进行科学计算的基础软件包。除其他外&#xff0c;它包括&#xff1a; 功能强大的N维数组对象。精密广播功能函数。集成 C/C和Fortran 代码的工具。强大的线性代数、傅立叶变换和随机数功能。 # 1、安装包 $ pip install numpy# 2、进入python的交互式界面 $…

策略模式-实现方式三

一 枚举类 Getter public enum AuthTypeEnum {QCT_PASSWORD("qct_password", "密码"),MOBILE("mobile", "验证码");public final String code;public final String desc;AuthTypeEnum(String code, String desc) {this.code code;th…

蓄电池在线监测:保障电力安全的智能之选---安科瑞 吴雅芳

一、蓄电池在线监测的重要性 随着科技的飞速发展&#xff0c;蓄电池在各个领域的应用日益广泛&#xff0c;从通信、电力到金融、医疗等行业&#xff0c;蓄电池都扮演着至关重要的角色。然而&#xff0c;蓄电池在使用过程中也面临着诸多问题。 蓄电池老化可能导致鼓胀、短路、漏…

React 子组件调用父组件的方法,以及互相传递数据

<script type"text/babel" data-type"module"> import React, { StrictMode, useState } from react; import { createRoot } from react-dom/client;const ParentComponent () > {const [message, setMessage] useState("")//父组件…

【火山引擎】 Chat实践 | 大模型调用实践 | python

目录 一 前期工作 二 Doubao-pro-4k_test实践 一 前期工作 1 已在火山方舟控制台在线推理页面创建了推理接入点 ,接入大语言模型并获取接入点 ID。 2 已参考安装与初始化中的步骤完成 SDK 安装和访问凭证配置

基于SSM的个性化商铺系统【附源码】

基于SSM的个性化商铺系统 效果如下&#xff1a; 用户登录界面 app首页界面 商品信息界面 店铺信息界面 用户功能界面 我的订单界面 后台登录界面 管理员功能界面 用户管理界面 商家管理界面 店铺信息管理界面 商家功能界面 个人中心界面 研究背景 研究背景 科学技术日新月异…

Java设计模式六大原则

Java设计模式的六大原则是面向对象设计中的基本准则&#xff0c;帮助开发人员构建更灵活、可维护和可扩展的系统。这些原则包括单一职责原则&#xff08;SRP&#xff09;、开闭原则&#xff08;OCP&#xff09;、里氏替换原则&#xff08;LSP&#xff09;、依赖倒置原则&#x…

fiber的原理

React Fiber 的主要原理包括动态优先级、可中断的工作、增量渲染和协作式多任务 React Fiber 是 React 16 引入的一种新的协调&#xff08;reconciliation&#xff09;引擎&#xff0c;它旨在提高 React 应用的性能和响应性。Fiber 的核心原理主要包括以下几个方面&#xff1a…

GitLab 发布安全补丁版本 17.3.2, 17.2.5, 17.1.7

本分分享极狐GitLab 补丁版本 17.4.2, 17.3.5, 17.2.9 的详细内容。这几个版本包含重要的缺陷和安全修复代码&#xff0c;我们强烈建议所有私有化部署用户应该立即升级到上述的某一个版本。对于极狐GitLab SaaS&#xff0c;技术团队已经进行了升级&#xff0c;无需用户采取任何…

常见linux命令及功能汇总

目录 一 系统状态检测命令 PS -AUX TOP pidof kill & killall ifconfig uname uptime free who last history sosreport 二 工作目录切换命令 pwd cd <工作路径> ls 三 文本文件编辑命令 cat more head tail tr wc stat cut …

LeetCode-3191 使二进制数组全部等于1的最少操作次数

又来到了今天的每日一题&#xff0c;距离上次更新每日一题得有十天了。 主要原因是这十天的题要么简单到爆&#xff0c;要么难到爆&#xff0c;再要么就是最近学校安排实训&#xff0c;时间比较紧。 废话不多说&#xff0c;来看看今天的题目。 题目很简单&#xff0c;就是给个…

CTF(五)

导言&#xff1a; 本文主要讲述在CTF竞赛中&#xff0c;web类题目easyphp。 靶场链接&#xff1a;攻防世界 (xctf.org.cn) 参考文章原文链接&#xff1a;Web安全攻防世界05 easyphp&#xff08;江苏工匠杯&#xff09;_攻防世界 easyphp-CSDN博客 一&#xff0c;观察页面。…