当前位置: 首页 > news >正文

Python-爬虫 (BS4数据解析)

文章目录

  • 1. BS4数据解析常见方法
  • 2.BS4数据解析,爬取豆瓣电影属性

1. BS4数据解析常见方法

BS4数据解析方法是把需要的数据进行截取。处理数据的时间比较长

测试用网页:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>模拟登录</title>
</head>
<body background="e6fa7ebdb49b3f57569742132926fc4d.jpg" style="background-size: cover">
    <h1 style="text-align: center">
        欢迎注册
    </h1>
    <h3 style="text-align: center">
        好好学习,天天向上
    </h3>

    <form action="" method="post" style="text-align:center">
        <input name="user" placeholder="昵称" type="text"><br><br>
        <input name="password" placeholder="密码" type="text"><br><br>

        <input name="XXX" value="1" type="radio">我同意<a href="https://ti.qq.com/agreement/index.html">服务协议</a><a href="https://rule.tencent.com/rule/preview/3fd52bde-6555-453b-9ab8-c5f1f3d22c62">隐私保护协议</a><br><br>
        <input type="submit" value="立即注册">
    </form>
</body>
</html>
from bs4 import BeautifulSoup

file = open("模拟登录.html", "r", encoding='utf-8')
response = file.read()
file.close()

html_data = BeautifulSoup(response, 'lxml')
print(html_data.h1)  # 获取h1标签代码

在这里插入图片描述
可见,直接获取h1标签内的所有内容

获取h1标签中的属性

print(html_data.h1.attrs) 

在这里插入图片描述
获取h1标签具体属性

print(html_data.h1['style']) 

在这里插入图片描述
获取title标签下的文字

print(html_data.title.text)

在这里插入图片描述
找所有满足要求的数据html_data.find_all(‘标签’,‘属性’)

print(html_data.find_all('body', style="background-size: cover"))

在这里插入图片描述
最后·如果由多个满足条件的标签,以列表的形式返回

2.BS4数据解析,爬取豆瓣电影属性

这里主要以练习BS4数据处理为目标,所以整个过程比较繁琐

import requests

from bs4 import BeautifulSoup

url = "https://movie.douban.com/subject/1292052/"

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

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

# print(response.text)
'''
爬取豆瓣电影详情页数据
1、导演,2、演员,3、类型
4、国家,5、语言,6、上映时间
'''


def WritMsg(_file, iterable):
    for _msg in iterable:
        StrForWrit = _msg.text
        _file.write(f" {StrForWrit} ")


html_data = BeautifulSoup(response.text, 'lxml')

file = open("msg.txt", "w", encoding="utf-8")

# 电影名
file.write("电影名:\n")
file.write(html_data.find('span', property="v:itemreviewed").text)
file.write("\n--------------------------\n")

# print(html_data.find_all('div', id="info"))
html_data = html_data.find_all('div', id="info")[0]

# 导演
write = html_data.find_all('a', rel="v:directedBy")[0].text
file.write(f"导演:\n{write}\n--------------------------\n")
# 演员
file.write("演员:\n")
msg = html_data.find_all('span', class_='attrs')[2]
# 每隔五个人换行
msg = msg.find_all('a')
flag = 0
for name in msg:
    if flag == 5:
        file.write("\n")
        flag = 0
    file.write(f"{name.text}|")
    flag += 1
file.write("\n--------------------------\n")

# 类型
file.write("电影类型:\n")
WritMsg(file, html_data.find_all('span', property="v:genre"))
file.write("\n--------------------------\n")

# 制片国家/地区
dic = {}
write = html_data.text
for cheat in write.split('\n'):
    array = cheat.split(':')
    if len(array) > 1:
        dic[array[0]] = array[1]
file.write(f"制片国家/地区:\n{dic['制片国家/地区']}")
file.write("\n--------------------------\n")

# 语言
file.write(f"语言:\n{dic['语言']}")
file.write("\n--------------------------\n")

# 上映时间
file.write("上映时间:\n")
# print(html_data.find_all('span', property="v:initialReleaseDate")[0].text)
WritMsg(file, html_data.find_all('span', property="v:initialReleaseDate"))
file.write("\n--------------------------\n")

file.close()

运行结果:
在这里插入图片描述

相关文章:

  • java基于ssm+vue+elementui的多用户博客管理系统
  • java毕业设计网站swing mysql实现的仓库商品管理系统[包运行成功]
  • java毕业设计论文题目基于SSM实现的小区物业管理系统[包运行成功]
  • “蔚来杯“2022牛客暑期多校训练营10 EF题解
  • 人工智能科学计算库—Numpy教程
  • i.MX6ULL应用移植 | 基于ubuntu base 16.04搭建python3.9+pip3环境
  • vim文本编辑器
  • 网课搜题接口
  • 网课查题API接口(免费)
  • 超分辨率重建DRRN
  • MacOS 环境编译 JVM 源码
  • Linux内核互斥技术1
  • 【RHCE-第五天作业】
  • MFCC--学习笔记
  • 领航杯2022年-Crypto-rsa
  • [译]CSS 居中(Center)方法大合集
  • 78. Subsets
  • angular2开源库收集
  • CentOS7 安装JDK
  • echarts的各种常用效果展示
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • Java比较器对数组,集合排序
  • laravel with 查询列表限制条数
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • vue数据传递--我有特殊的实现技巧
  • 每天10道Java面试题,跟我走,offer有!
  • 模型微调
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 小程序 setData 学问多
  • 怎样选择前端框架
  • 《天龙八部3D》Unity技术方案揭秘
  • 通过调用文摘列表API获取文摘
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ​2021半年盘点,不想你错过的重磅新书
  • (07)Hive——窗口函数详解
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (顺序)容器的好伴侣 --- 容器适配器
  • (四)Controller接口控制器详解(三)
  • (算法)N皇后问题
  • (一)Neo4j下载安装以及初次使用
  • (转)EOS中账户、钱包和密钥的关系
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET 5种线程安全集合
  • .NET BackgroundWorker
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .NET Core 版本不支持的问题
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • /usr/bin/python: can't decompress data; zlib not available 的异常处理
  • ??myeclipse+tomcat
  • @vue/cli 3.x+引入jQuery
  • [ 代码审计篇 ] 代码审计案例详解(一) SQL注入代码审计案例