首页 > 编程语言 > Python爬虫之bs4,非常详细

Python爬虫之bs4,非常详细

时间:2022-08-17 12:55:11浏览次数:65  
标签:title Python 标签 爬虫 BeautifulSoup bs4 html res print

Python爬虫之bs4,非常详细

bs4 全名 BeautifulSoup,是编写 python 爬虫常用库之一,主要用来解析 html 标签。

一、初始化

pip install bs4

from bs4 import BeautifulSoup

soup = BeautifulSoup("<html>A Html Text</html>", "html.parser")

两个参数:第一个参数是要解析的html文本,第二个参数是使用那种解析器,对于HTML来讲就是html.parser,这个是bs4自带的解析器。

如果一段HTML或XML文档格式不正确的话,那么在不同的解析器中返回的结果可能是不一样的。

解析器 使用方法 优势
Python标准库 BeautifulSoup(html, "html.parser") 1、Python的内置标准库
2、执行速度适中
3、文档容错能力强
lxml HTML BeautifulSoup(html, "lxml") 1、速度快
2、文档容错能力强
lxml XML BeautifulSoup(html, ["lxml", "xml"])
BeautifulSoup(html, "xml")
1、速度快
2、唯一支持XML的解析器
html5lib BeautifulSoup(html, "html5lib") 1、最好的容错性
2、以浏览器的方式解析文档
3、生成HTML5格式的文档

格式化输出

soup.prettify()  # prettify 有括号和没括号都可以

二、基本使用

from bs4 import BeautifulSoup

# 构造一个网页数据
html_doc = """
<html>
    <head>
        <title>The Dormouse's story</title>
    </head>
    <body>
        <p class="title">
            <b>The Dormouse's story</b>
        </p>
        
        <p class="story">Once upon a time there were three little sisters; and their names were
        <a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>
        <a href="http://example.com/lacie" class="sister" id="link2">Lacie</a>
        <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>
        and they lived at the bottom of a well.</p>
        
        <p class="story">...</p>
    </body>
</html>
"""

2.1 获取标签

res = BeautifulSoup(html_doc, 'lxml')

print(res.a)

2.2 获取标签内文本

print(res.a.text) 

2.3 获取标签内属性

print(res.a.attrs)

2.4 获取指定属性值

print(res.a.attrs.get('href'))
print(res.a.get('href'))

2.5 获取子节点

for i in res.p.children:
    print(i)

2.6 获取标签内部所有的元素

print(res.p.contents)

2.7 获取标签的父标签

print(res.p.parent)

2.8 获取最上级节点

for i in res.p.parents:
    print(i)

三、bs4核心库

3.1 find

只能找符合条件的第一个 该方法的返回结果是一个标签对象

3.1.1 查找指定标签名的标签 默认只找符合条件的第一个

print(res.find(name='p'))

3.1.2 查找具有某个特定属性的标签 默认只找符合条件的第一个

print(res.find(name='p', id='title'))

3.1.3 为了解决关键字冲突 会加下划线区分

print(res.find(name='p', class_='title'))

3.1.4 使用attrs参数 直接避免冲突

print(res.find(name='p', attrs={'class': 'title'}))

3.2 find_all

查找所有符合条件的标签 该方法的返回结果是一个列表。

3.2.1 查询某一个标签,查找的结果是一个列表

print(res.find_all('a'))

3.3 select方法

使用css选择器 该方法的返回结果是一个列表。

3.3.1 查找class含有title的标签

print(res.select('.title'))

3.3.2 查看class含有sister标签内部所有的后代span

print(res.select('.title b'))

3.3.3 查找id等于title的标签

print(res.select('#title'))

四、使用bs4爬取豆瓣电影排行榜

from bs4 import BeautifulSoup
import requests
import re

def main():

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

    baseurl = "https://movie.douban.com/top250?start="

    res = requests.get(url=baseurl, headers=head)

    connect = res.text

    res = BeautifulSoup(connect, 'lxml')

    video = res.select('.grid_view li')

    list = []

    for i in video:

        vidow = {
            "title": "",
            "year": "",
            "score": 0,
            "num": 0
        }

        for item in i.select('.title'):
            vidow['title'] += item.text.replace("\xa0", " ")

        for item in i.select('.other'):
            vidow['title'] += item.text.replace("\xa0", " ")

        for item in i.select(".bd p"):
            obj = re.compile('\d{4}', re.S)
            result = obj.finditer(item.text)
            for year in result:
                vidow['year'] = year.group()

        for item in i.select(".rating_num"):
            vidow['score'] = item.text

        vidow['num'] = i.select(".star span")[-1].text.replace("人评价", "")

        list.append(vidow)

    print(list)
if __name__ == '__main__':

    main()

标签:title,Python,标签,爬虫,BeautifulSoup,bs4,html,res,print
From: https://www.cnblogs.com/chenyangqit/p/16594745.html

相关文章

  • Python小程序(二):巡检H3C网络设备
    Python小程序(二):巡检H3C网络设备读取设备列表或txt文件,自动化巡检H3C设备。importnetmikofromnetmikoimportConnectHandler,NetmikoBaseExceptionimportdatetime,t......
  • Python逆向爬虫之正则表达式
    Python逆向爬虫之正则表达式字符串是我们在编程的时候很常用的一种数据类型,检查会在字符串里面查找一些内容,对于比较简单的查找,字符串里面就有一些内置的方法可以处理,对于......
  • Python 字典排序
    字典是“键-值对”的无序可变序列在实际运用中,对字典进行排序是一个比较常见的操作,主要用到了python内置函数sorted(),该函数可以对所有可迭代的对象进行排序操作。语法(pyth......
  • 批量产生文件夹(Python)
    1、指定文件夹路径,在该路径下批量生成指定名称(具有一定的规律性)的文件夹#导入OS库importosFilePath=""#指定文件夹路径NumSets=#文件夹个数defBatProFile_......
  • 跟我学Python图像处理丨基于灰度三维图的图像顶帽运算和黑帽运算
    摘要:本篇文章结合灰度三维图像讲解图像顶帽运算和图像黑猫运算,通过Python调用OpenCV函数实现。本文分享自华为云社区《[Python图像处理]十三.基于灰度三维图的图像顶帽运......
  • python自动化上传文件
    定位上传文件的按钮报错:selenium.common.exceptions.ElementNotInteractableException:Message:elementnotinteractable修改为执行js代码正常,如下:elem_js=self._dr......
  • python打包成EXE文件
    参考博客:https://www.300.cn/itzspd/609175.htmlPython打包工具PyInstaller的安装与pycharm配置支持PyInstaller详细方法windows系统下安装Pyinstallercmd下输入指令pi......
  • python菜鸟学习: 8. 集合基础知识
    #-*-coding:utf-8-*-#列表的特性:1,去重;2.关系测试list1=[1,4,6,8,7,8,9]#集合去重list2=set(list1)print(list2)list4=[1,3,5,7,9,11]list3=set(l......
  • python_socket
    importsocketdeftarget_tcp(host,port):"""建立tcp连接"""client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#创建socket对象client.co......
  • Python修改windows键盘映射
    新电脑环境的处理之一是修改键盘映射,主Ctrl键使用CapsLockCapsLock改为LeftCtrlRightCtrl改为CapsLockLeftCtrl改为RightCtrl原来使用KeybMap这个软件修改,由于自己修改......