python爬虫入门(四)之Beautiful Soup库

一、什么是Beautiful Soup库

1、Beautiful Soup库是用来做HTML解析的库

Beautiful Soup把看起来复杂的HTML内容,解析成树状结构,让搜索和修改HTML结构变得更容易

2、第三方库,先安装

终端输入pip install bs4

from bs4 import BeautifulSoup(引入)

3、beautifulsoup和bs4是什么关系

二、储备知识:

from bs4 import BeautifulSoup

import requests

header={"User_Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"}#注意是字典类型
content=requests.get("http://books.toscrape.com/",headers=header).text#注意是headers,注意网址别写错,可以直接复制粘贴

#把content传入BeautifulSoup的构造函数里

soup=BeautifulSoup(content,"html.parser") #第二个参数指定解析器,即可以解析什么类型的内容

#print(soup.p) #都是打印第一个出现的元素
#print(soup.img)

#浏览器的检查功能
#运用某种方法,找出所有class属性值为“price_color”的p标签

all_prices=soup.findAll("p",attrs={"class":"price_color"})#注意是findAll
#findAll能根据标签、属性等找出所有符合要求的元素,attrs是可选参数(字典类型)
#findAll返回可迭代对象,可以用for循环遍历各个对象
for price in all_prices:
    print(price)

#如果不想打印乱七八糟的HTML标签信息,可以选择打印对象的string属性(把标签包围的文字返回给我们)
for price in all_prices:
    print(price.string[2:])
#如果只想要纯净的数字,不要前面的货币符号,用一些字符串操作方法也可以实现,比如切片操作
#切片操作: 获得索引值大于等于2的所有剩下字符串

#找书名: 共性->所有书名都是h3元素的子元素->找所有h3元素下的a元素
#1、找到所有h3元素
all_titles=soup.findAll("h3")
#2、找到每个h3元素下的所有a元素
for title in all_titles:
    all_links=soup.findAll("a")
#3、提取a元素里的文字
    for link in all_links:
        print(link.string)

#由于h3里只有一个a元素,可以直接找第一个
for title in all_titles:
    link=title.find("a")
    print(link.string)

三、小试牛刀:

import requests
from bs4 import BeautifulSoup

head={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"}
#一页只有25部电影,每一页的链接不一样
for start_num in range(0,250,25): #0,25,50...225
    response=requests.get(f"https://movie.douban.com/top250?start={start_num}",headers=head)
    content=response.text
    soup=BeautifulSoup(content,"html.parser")
    all_titles=soup.findAll("span",attrs={"class":"title"})
    for title in all_titles:
        # 原版标题前面有一个斜杠,用if判断
        title_string=title.string
        if "/" not in title_string:
            print(title_string)

注意:

1、在 requests.get 的 URL 中,start=start_num 是一个字符串而不是变量。应该使用字符串格式化方法将 start_num 的值插入 URL 中

2、遇到过的一个bug(因为head写成了字符串,漏了“User-Agent”,应该写字典形式才对):

  • 错误信息AttributeError: 'str' object has no attribute 'items'

    这行错误信息告诉我们代码试图调用 .items() 方法(返回字典的键值对),而这个方法在字符串对象上是不可用的。由此可以推断,传递给 requests.getheaders 参数是一个字符串而不是字典。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Cyber Weekly #14:WAIC 2024

赛博新闻 1、WAIC2024开幕:一半机器人,一半大模型 7月4日,AI界春晚——2024世界人工智能大会(WAIC 2024)在上海开幕,大会展示了500家企业的1500项展品,突出了机器人和大模型技术。国产机器人和…

【排序算法】—— 快速排序

快速排序的原理是交换排序,其中qsort函数用的排序原理就是快速排序,它是一种效率较高的不稳定函数,时间复杂度为O(N*longN),接下来就来学习一下快速排序。 一、快速排序思路 1.整体思路 以升序排序为例: (1)、首先随…

学生管理系统(通过顺序表,获取连续堆区空间实现)

将学生的信息,以顺序表的方式存储(堆区),并且实现封装函数 : 1】顺序表的创建, 2】判满、 3】判空、 4】往顺序表里增加学生信息、 5】遍历学生信息 6】任意位置插入学生信息 7】任意位置删除学生信…

【大模型LLM面试合集】大语言模型基础_llm概念

1.llm概念 1.目前 主流的开源模型体系 有哪些? 目前主流的开源LLM(语言模型)模型体系包括以下几个: GPT(Generative Pre-trained Transformer)系列:由OpenAI发布的一系列基于Transformer架构…

对话大模型Prompt是否需要礼貌点?

大模型相关目录 大模型,包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步,扬帆起航。 基于Dify的QA数据集构建(附代码)Qwen-2-7B和GLM-4-9B&#x…

Android OpenGL ES 离屏幕渲染1——EGL环境的创建,以及基础概念的理解

创建EGL上下文、配置EGL环境、创建EGL DISPLAY 什么是EGL: 由于OpenGL ES并不负责窗口管理以及上下文管理,该职责由各个平台自行完成;在Android平台下OpenGL ES的上下文环境是依赖EGL的API进行搭建的。 对于EGL这个框架,谷歌已经提…

WAWA鱼曲折的大学四年回忆录

声明:本文内容纯属个人主观臆断,如与事实不符,请参考事实 前言: 早想写一下大学四年的总结了,但总是感觉无从下手,不知道从哪里开始写,通过这篇文章主要想做一个记录,并从现在的认…

那些年背过的面试题——MySQL篇

本文是技术人面试系列 MySQL 篇,面试中关于 MySQL 都需要了解哪些基础?一文带你详细了解,欢迎收藏! WhyMysql? NoSQL 数据库四大家族 列存储 Hbase K-V 存储 Redis 图像存储 Neo4j 文档存储 MongoDB 云存储 OSS …

【Gin】项目搭建 一

环境准备 首先确保自己电脑安装了Golang 开始项目 1、初始化项目 mkdir gin-hello; # 创建文件夹 cd gin-hello; # 需要到刚创建的文件夹里操作 go mod init goserver; # 初始化项目,项目名称:goserver go get -u github.com/gin-gonic/gin; # 下载…

C++入门7——string类详解

目录 1.什么是string类? 2.string类对象的常见构造 2.1 string(); 2.2 string (const char* s); 2.3 string (const string& str); 2.4 string (const string& str, size_t pos, size_t len npos); 2.5 string (const char* s, size_t n); 2.7 验证…

模块一SpringBoot(一)

maven记得配置本地路径和镜像 IJ搭建 SpringIntiallizer--》将https://start.spring.io改成https://start.aliyun.com/ 项目结构 Spring有默认配置, application.properties会覆盖默认信息: 如覆盖端口号server.port8888

一个最简单的comsol斜坡稳定性分析例子——详细步骤

一个最简单的comsol斜坡稳定性分析例子——详细步骤 标准模型例子—详细步骤 线弹性模型下的地应力平衡预应力与预应变、土壤塑性和安全系数求解的辅助扫描

【深入理解JVM】关于Object o = new Object()

1. 解释一下对象的创建过程 “半初始化”状态通常指的是对象在内存分配后、但在完全初始化之前的一种状态。在Java中,虽然JVM的规范和设计努力避免对象处于这种不稳定的状态,但在多线程环境下,由于指令重排序等并发问题,仍有可能…

通义千问 2,大模型应用开发时的新选择

我在进行 AI 相关的开发中,最常用的模型是通义千问。本地开发的时候,使用 Ollama 来运行 qwen 模型。集成测试和线上环境,使用阿里云模型服务灵积上的通义千问模型。使用阿里云的好处是:模型服务的获取方便,稳定性好&a…

无人机5公里WiFi低延迟图传模组,抗干扰、长距离、低延迟,飞睿智能无线通信新标杆

在科技日新月异的今天,我们见证了无数通信技术的飞跃。从开始的电报、电话,到如今的4G、5G网络,再到WiFi的广泛应用,每一次技术的革新都极大地改变了人们的生活方式。飞睿智能5公里WiFi低延迟图传模组,它以其独特的优势…

GD32实战篇-双向数控BUCK-BOOST-BUCK降压理论基础

本文章基于兆易创新GD32 MCU所提供的2.2.4版本库函数开发 向上代码兼容GD32F450ZGT6中使用 后续项目主要在下面该专栏中发布: https://blog.csdn.net/qq_62316532/category_12608431.html?spm1001.2014.3001.5482 感兴趣的点个关注收藏一下吧! 电机驱动开发可以跳转…

Java多线程不会?一文解决——

方法一 新建类如MyThread继承Thread类重写run()方法再通过new MyThread类来新建线程通过start方法启动新线程 案例&#xff1a; class MyThread extends Thread {public MyThread(String name) {super(name);}Overridepublic void run() {for(int i0;i<10;i){System.out.…

kafka-3

Kafka 消费组 consumer-offsets-N 稀疏索引 Kafka集群 集群搭建 集群启动和验证 Topic的意义 Topic和Partition 分区 副本 集群操作指令 多分区&多副本 多分区消费组 Rebalance机制 Rebalance机制处理流程 Rebalance机制-Range Rebalance机制-RoudRobin Rebalance机制-St…

【Linux】在线求助命令--help,man page , info page

我们知道Linux有很多的命令&#xff0c;那LInux要不要背命令&#xff1f; 答案是背最常用的那些就行了 那有的时候我们想查询一些命令的详细用法该怎么办呢&#xff1f; 这里我给出3种方法 1.--help --help的使用方法很简单啊 要查询的命令 --help 我们看个例子 这里我只…

一览 Anoma 上的有趣应用概念

撰文&#xff1a;Tia&#xff0c;Techub News 本文来源香港Web3媒体&#xff1a;Techub News Anoma 的目标是为应用提供通用的意图机器接口&#xff0c;这意味着使用 Anoma&#xff0c;开发人员可以根据意图和分布式意图机编写应用&#xff0c;而不是根据事务和特定状态机进行…