Python爬虫:BeautifulSoup

server/2024/9/25 21:19:16/

安装

打开cmd,键入pip install bs4,下载慢的用清华源

BeautifulSoup

 

 一,概念

bs4数据解析的一种工具,其实和正则表达式差不多的用处,但是bs返回的是网页源代码,我们通过bs4返回的对象可以直接操作标签的标签的各种属性达到加快筛选元素的目的,并且不同于正则表达式,bs4处理过程非常简单(如果你有前端基础的话)。

二,使用

python">from bs4 import BeautifulSouphtml = """<ul><li><a href="zhubajie.com">猪八戒</a></li><li id="abc"><a href="zhouxingchi.com">周星驰</a></li><li><a href="zhangwuji.com">张无忌</a></li><li><a href="wuzetian.com">武则天</a></li></ul>"""#1.初始化BeautifulSoup对象page = BeautifulSoup(html,features="html.parser")
print(page)

假设我们有一个html文件,通过bs4解析,我们会得到一个bs4对象,html.parser是指用html的格式解析。 

 输出结果:

1.find方法

python">from bs4 import BeautifulSoup
html = """<ul><li><a href="zhubajie.com">猪八戒</a></li><li id="abc"><a href="zhouxingchi.com">周星驰</a></li><li><a href="zhangwuji.com">张无忌</a></li><li><a href="wuzetian.com">武则天</a></li></ul>"""page = BeautifulSoup(html,features="html.parser")
page.find()#查找某个元素,输入标签名,还可以将属性放入attr字典中
res = page.find("li",attrs={'id':'abc'})#find只找一个,找到就完
print(res)#<li id="abc"><a href="zhouxingchi.com">周星驰</a></li>
a = res.find("a")#可以连续找
print(a)#<a href="zhouxingchi.com">周星驰</a>
print(a.text)#周星驰#获取文本
print(a.get("href"))#zhouxingchi.com#get获取属性

 

概括一下,find就是用来找标签用的,不用加<>,如果标签具有某些属性,比如说id,class什么的,你就可以用attr(字典) 来直接选中,当然find方法是支持连续的,意思就是找到一个父标签,你可以对父标签再用一次find找到它的子标签,以此类推,非常方便。提一嘴,find只能找一个,找多个要findall方法了

2.findall方法

python">from bs4 import BeautifulSoup
html = """<ul><li><a href="zhubajie.com">猪八戒</a></li><li id="abc"><a href="zhouxingchi.com">周星驰</a></li><li><a href="zhangwuji.com">张无忌</a></li><li><a href="wuzetian.com">武则天</a></li></ul>"""page = BeautifulSoup(html,features="html.parser")
res_ = page.find_all("li")
print(res_)#[<li><a href="zhubajie.com">猪八戒</a></li>, <li id="abc"><a href="zhouxingchi.com">周星驰</a></li>,# <li><a href="zhangwuji.com">张无忌</a></li>, <li><a href="wuzetian.com">武则天</a></li>]res_ = page.find_all("a")
print(res_)#[<a href="zhubajie.com">猪八戒</a>,# <a href="zhouxingchi.com">周星驰</a>, <a href="zhangwuji.com">张无忌</a>, <a href="wuzetian.com">武则天</a>]

 

 

findall返回的是一个包含所有目标标签的列表,我们可以直接遍历取出来 

以上,就是bs4最常用的两个方法了,基本上能用上bs4的情况下这两个方法是够用的。

三,案例

爬取优美图库(可以选其他的网站,步骤是相似的)

python">from bs4 import BeautifulSoup
import requests
import os
url = "http://www.umeituku.com/bizhitupian/xiaoqingxinbizhi/"response = requests.get(url)
content = response.content.decode('utf-8')label = BeautifulSoup(content,features='html.parser')
div = label.find("div",attrs={'class':'TypeList'})
imgs = div.find_all("img")
srcs = []
for img in imgs:src = img.get("src")srcs.append(src)
print(srcs)
#下载
os.mkdir('images')
n = 1
for src in srcs:img_response = requests.get(src)path = './images/'+str(n)+'.jpg'with open(path, mode='wb') as f:f.write(img_response.content)n+=1

 

 

 

 

 

 

 


http://www.ppmy.cn/server/25209.html

相关文章

【ARMv9 DSU-120 系列 9 -- DSU-120 Debug block】

请阅读【Arm DynamIQ™ Shared Unit-120 专栏 】 请阅读【ARM Coresight SoC-400/SoC-600 专栏导读】 文章目录 ARM DSU-120 Debug BlockCluster debug componentsCache DebugDSU-120 Cache Debug 特性应用场景Terminology处理元素(PE)

【Vue3进阶】- Router 4

Vue Router 是 Vue.js 官方提供的路由管理器&#xff0c;它与 Vue.js 核心深度集成&#xff0c;使得构建单页面应用&#xff08;SPA&#xff09;变得容易。在单页面应用中&#xff0c;所有视图和组件都通过路由来管理和切换&#xff0c;而不是传统的整页刷新。 在本课文中将介…

C基础语法速览

叠甲&#xff1a;以下文章主要是依靠我的实际编码学习中总结出来的经验之谈&#xff0c;求逻辑自洽&#xff0c;不能百分百保证正确&#xff0c;有错误、未定义、不合适的内容请尽情指出&#xff01; 文章目录 1.数据类型1.1.数据类型的常见分类1.2.数据类型的符号修饰1.3.数据…

CSS的布局模式

前言&#xff1a; 我们可以看到京东的官网上的一些例子&#xff08;如下图&#xff09;&#xff0c;在同一排中能够存在多个div&#xff0c;这是通过布局方式&#xff08;例如浮动&#xff09;来实现的。 CSS传统的布局模式&#xff1a; <1>普通流&#xff08;又称之为标…

多家企业机密数据遭Lockbit3.0窃取,亚信安全发布《勒索家族和勒索事件监控报告》

本周态势快速感知 本周全球共监测到勒索事件87起&#xff0c;与上周相比勒索事件大幅下降。美国依旧为受勒索攻击最严重的国家&#xff0c;占比45%。 本周Cactus是影响最严重的勒索家族&#xff0c;Lockbit3.0和Bianlian恶意家族紧随其后&#xff0c;从整体上看Lockbit3.0依旧…

ASP.NET教务管理平台-权限及公共模块设计与开发

摘 要 随着教育改革的不断深化&#xff0c;高等院校的建设与发展对国民整体素质的提高起着越来越重要的作用&#xff0c;建立一套能够适应这些改变的行政管理方案也就显得尤为重要。对于教务处来说&#xff0c;将信息技术用于校务管理中便是迫切的要求。 教务系统中的用户…

JVM垃圾收集器--分区收集器

G1收集器 属性 G1&#xff08;Garbage-First Garbage Collector&#xff09;在 JDK 1.7 时引入&#xff0c;在 JDK 9 时取代 CMS 成为了默认的垃圾收集器。G1 有五个属性&#xff1a;分代、增量、并行、标记整理、STW。 分代 G1收集器 将内部分为多个大小相等的区域&#x…

Android 学习 鸿蒙HarmonyOS 4.0 第四章(TS中的条件判断语句)

PS&#xff1a;在有关TS的博客中呢&#xff0c;我想声明一点&#xff0c;如果是零基础没有开发经验的小伙伴&#xff0c;直接学鸿蒙会有些吃力&#xff0c;可以先学一下TS&#xff0c;比较好入手一些&#xff0c;鸿蒙主推的开发语音是ArkTS&#xff0c;是TS的超集&#xff0c;先…