利用bs4爬取资料信息

bs4解析-HTML语法

bs4解析比较简单,但是呢,首先你需要了解一下html知识,然后再去使用bs4去提取,逻辑和编写难度就会非常简单和清晰
HTML(Hyper Text Markup Language)超文本标记语言,是我们编写网页的最基本也是最核心的一种语言.其语法规则就是用不同的标签对网页上的内容进行标记,从而使网页显示出不同的展示效果。

<h1>我爱放假</h1>

上述代码的含义是在页面中显示"我爱放假"四个字,但是被" <h1>"和"</h1>"" 标记了。白话就是被括起来了被H1这个标签括起来了,这个时候浏览器在展示的时候就会让字体变粗变大,俗称标题,所以HTML的语法就是用似这样的标签对页面内容进行标记,不同的标签表现出来的效果也是不一样的。

h1:一级标题
h2:二级标题
p:段落
body:主体
在这里插入图片描述
这里简单科普一下,其实HTML标签还有很多很多的,我们不需要一一列举。
在这里插入图片描述

一、安装bs

  • pip install bs4
    或requests安装方式那样安装

二、bs4介绍

  • BeautifulSoup4(简称bs4)是一个强大的Python库,专门用于解析HTML和XML文档。它可以非常方便地从结构复杂、格式不规范的网页源代码中提取出有用的数据。以下是对BeautifulSoup4主要功能和特性的介绍:

  • 1、解析功能:

    • BS4能够接受各种形式的输入,如字符串形式的HTML或XML文本,或者已经读取好的文件。
    • 它利用内置的解析器(如Python标准库的html.parser,或者第三方库如lxml)将这些文本转化为复杂的树状结构,即DOM树(Document Object Model),使得开发者可以通过编程方式操作和访问页面元素。
  • 2、易用性:

    • 提供了一套简单直观的API,允许用户通过标签名、CSS选择器或属性值来查找、定位和筛选网页元素。
    • 可以处理文档的各种异常情况,比如缺失结束标签、嵌套错误等,尽可能还原出文档结构。
  • 3、数据提取:

    • find()和find_all()是最常用的两个方法,分别用于查找文档中第一个匹配特定条件的元素和所有匹配的元素集合。
    • 可以获取标签名、属性以及标签内的文本内容,甚至可以递归地遍历整个文档树以抽取深层嵌套的数据。
  • 4、灵活性:

    • 支持多种搜索方法,包括基于标签、类名、ID、属性等进行精确或模糊匹配。
    • 结合Python语言本身的强大功能,可以编写高效灵活的脚本来批量处理大量网页数据。
  • 总之,对于网络爬虫开发者而言,BeautifulSoup4是一个不可或缺的工具,它简化了网页抓取和数据提取的过程,极大地提高了数据清洗和预处理的效率。

三、案例介绍

案例1:下载https://home.meishichina.com/recipe/recai/网站的菜谱信息
在这里插入图片描述

  • 编写代码
    在这里插入图片描述
from bs4 import BeautifulSoup
import requests

url = "https://home.meishichina.com/recipe/recai/"

headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36 Edg/123.0.0.0"
    }

resp = requests.get(url,headers=headers)

#print(resp.text)
#解析数据
#1、把页面源代码交给bs4进行处理,生成bs对象
page = BeautifulSoup(resp.text,"html.parser")#制定html解析器

#2、从bs对象中找到数据
#find(标签,属性=值)
#find_all(标签,属性=值)
#div = page.find("div",class_="ui_newlist_1 get_num") #class是python的关键字
div1 = page.find("div",attrs={"class":"ui_newlist_1 get_num"})#和上一行是一样的意思,此时可以避免class
#print(div1)

#找到数据所在的li标签,返回的是多个
lis = div1.find_all("li")
count = 0;
for li in lis:
    h2 = li.find_all("a")
    p = li.find_all("p")
    try :
        title = h2[1].text
        author = h2[2].text
        con = p[1].text
        print(title,"---",author,"---",con)
    except IndexError as e:
            print("异常")

  • 运行结果
    在这里插入图片描述
    案例2:下载https://movie.douban.com/celebrity/1315477/photos/里面的图片
  • 编写代码
    在这里插入图片描述
import requests
from bs4 import BeautifulSoup

url = "https://movie.douban.com/celebrity/1315477/photos/"

headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36 Edg/123.0.0.0"
    }

resp = requests.get(url,headers=headers)

#创建bs对象
page = BeautifulSoup(resp.text,"html.parser")
#查找数据
data = page.find_all("ul",class_="poster-col3 clearfix")
count = 0
plist = None
for d in data:
    plist = d.find_all("img")

for img in plist:
    #通过[属性名]拿属性值
    print(img["src"])
    imgLink = img["src"]
    #下载图片 并保存
    imgName = imgLink.split("/")[-1]
    imgContent = requests.get(imgLink)
    with open(imgName,"wb") as f:
        f.write(imgContent.content)#要写的内容

resp.close()
  • 运行结果
    在这里插入图片描述
  • 爬取到的图片如下:
    在这里插入图片描述
  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值