week04day03(爬虫 beautifulsoup4、)

news2024/11/15 21:29:43

一. 使用bs4解析网页

'''
下载bs4 - pip install beautifulsoup4
使用的时候 import bs4

专门用于解析网页的第三方库
在使用bs4的时候往往会依赖另一个库lxml
pip install lxml
'''

网页代码

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>Title</title>
	</head>
	<body>
		<h2>电影大全</h2>
		<div id="box1">
			<div class="item">
				<p>肖生克的救赎</p>
				<span>评分:</span>
				<span class="score">9.7</span>
			</div>
			<div class="item">
				<p>霸王别姬</p>
				<span>评分:</span>
				<span class="score">9.6</span>
			</div>
			<div class="item">
				<p>阿甘正传</p>
				<span>评分:</span>
				<span class="score">9.5</span>
			</div>
			<img src="https://img9.doubanio.com/view/photo/s_ratio_poster/public/p457760035.webp" class="">
			<div id="box2">
				<div>
					<p>我是段落1</p>
				</div>
			</div>
		</div>
	</body>
</html>

对以上代码进行操作:

from bs4 import BeautifulSoup
# bs4 用法
# 1.准备需要解析的数据
html = open('for_bs4.html',encoding='utf-8').read()

# 2.生成基于网页源代码的bs4对象
soup = BeautifulSoup(html,'lxml')

# 3.获取标签
# soup.select()   在整个网页中获取css选择器选中的所以标签
#soup.select_one() 在整个网页中获取css选择器中的第一个标签

result = soup.select('#box1 p')
print(result)
result1 = soup.select_one('#box1 p')
print(result1)

'''
总结:标签对象.select(css选择器)     获取css选择器所有标签,返回一个列表,列表中元素是标签对象
     标签对象.select_one(css选择器)  获取第一个标签,结果是标签对象
'''

result3 =soup.select('p')
#print(result3)

result4 = soup.select('#box2')
#print(result4)

#4. 获取标签内容和标签属性
p = soup.select_one('p')
img = soup.select_one('img')

# a.获取标签内容  标签对象.text
print(p.text)  #肖申克的救赎
# b. 获取标签的属性值
print(img.attrs['src'])
# https://b0.bdstatic.com/ugc/mFgjRS-3T9fHnYC3CAxHHwba8a3cbd3af3e42ddda89fa78b831a5f.jpg@h_1280

二. 爬取豆瓣电影的信息

from bs4 import BeautifulSoup
import requests
import csv


# 1.获取网页数据
def get_net_data(url: str):
    # headers进行伪装成正常的浏览器访问
    headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
    }
    # 获取网页代码信息
    response = requests.get(url=url, headers=headers)
    # 返回解析后的代码信息
    return response.text


# 2.解析网页数据
# ol class='grid_view' ->li ->div .item
#这里的html 就是第一步中解析网页代码后的信息
def analyse_data(html: str):
    # 生成基于网页源代码的bs4对象
    soup = BeautifulSoup(html, 'lxml')
    # 将所需要的电影信息代码块都获取下来
    all_films_div = soup.select('.grid_view>li>.item')

    all_data = []
  # 遍历每一个代码块,一个代码块都是一部电影的具体信息
    for div in all_films_div:
        name = div.select_one('.title').text
        info = div.select_one('.bd>p').text.strip().split('\n')[-1].strip()
        time, country, category = info.split('/')
        score = div.select_one('.rating_num').text
        comment_count = div.select('.star>span')[-1].text[:-3]
        intro = div.select_one('.inq').text

        all_data.append([name, score, time.strip(), country.strip(), category.strip(), comment_count, intro])

    f = open('../files/第一页电影数据.csv','w',encoding='utf-8',newline='')
    #创建一个 CSV 文件写入器,并将其关联到一个已经打开的文件对象 f 上,就是在创建的第一页数据电影文件中准备录入信息
    writer = csv.writer(f)
    # 写的是表头 writerow 只写一行
    writer.writerow(['电影名字','评分','上映时间','发行国家地区','类型','评论人数','简介'])
    # csv文件中写入内容
    writer.writerows(all_data)

if __name__ == '__main__':
    # for q in range(0, 251, 25):
    #     url1 = f'https://movie.douban.com/top250?start={q}&filter='

    result = get_net_data(url='https://movie.douban.com/top250') #返回的是 response.text
    analyse_data(result)


三. 爬取250部电影(二只爬取了第一页内容,网站有很多页)

from bs4 import BeautifulSoup
import requests
import csv


# 1.获取网页数据
def get_net_data(url: str):
    # headers进行伪装成正常的浏览器访问
    headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
    }
    # 获取网页代码信息
    response = requests.get(url=url, headers=headers)
    # 返回解析后的代码信息
    return response.text


# 2.解析网页数据
# ol class='grid_view' ->li ->div .item
#这里的html 就是第一步中解析网页代码后的信息
def analyse_data(html: str):
    # 生成基于网页源代码的bs4对象
    soup = BeautifulSoup(html, 'lxml')
    # 将所需要的电影信息代码块都获取下来
    all_films_div = soup.select('.grid_view>li>.item')

    all_data = []
  # 遍历每一个代码块,一个代码块都是一部电影的具体信息
    for div in all_films_div:
        name = div.select_one('.title').text
        info = div.select_one('.bd>p').text.strip().split('\n')[-1].strip()
        time, country, category = info.split('/')
        score = div.select_one('.rating_num').text
        comment_count = div.select('.star>span')[-1].text[:-3]
        intro = div.select_one('.inq').text

        all_data.append([name, score, time.strip(), country.strip(), category.strip(), comment_count, intro])

    f = open('../files/250部电影数据.csv','w',encoding='utf-8',newline='')
    #创建一个 CSV 文件写入器,并将其关联到一个已经打开的文件对象 f 上,就是在创建的第一页数据电影文件中准备录入信息
    writer = csv.writer(f)
    # 写的是表头 writerow 只写一行
    writer.writerow(['电影名字','评分','上映时间','发行国家地区','类型','评论人数','简介'])
    # csv文件中写入内容
    writer.writerows(all_data)

'''
在这里有所改变,看下面代码,上面都一样
'''
if __name__ == '__main__':
    for page in range(0, 250, 25):
        url = f'https://movie.douban.com/top250?start={page}&filter='
        result = get_net_data(url=url) #返回的是 response.text
        analyse_data(result)

四. os模块(看创建的文件是否存在,不存在进行创建,这是避免使用open的时候出现文件不存在的报错)

import os
if not os.path.exists('../files/abc'):
    os.mkdir('../files/abc')

五. 爬取英雄联盟的英雄名字(json)方法

    json在netwok 中的 fetch/xhr 中找

import requests
response = requests.get('https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js')
result = response.json()

for x in result['hero']:
    print(x['name'],x['alias'])
    
    
  • 找到network(网络),然后点击Fetch/XHR

  • 一一找到名称列表的文件,通过preview(预览)查看是否我们需要的数据

  • 查看json数据结构,并获取数据

六.下载安妮的皮肤

import requests


# 1.定义一个函数
#img:是图片链接
def download(img: str, name: str):
    res = requests.get(img)

    with open(f'../skin/{name}.jpg', 'wb') as f:
     # 因为是图片所有用content
        f.write(res.content)


# 2.主程序入口下载图片
#用的还是json 还是network 下 fetch/xhr找
if __name__ == '__main__':
    response = requests.get('https://game.gtimg.cn/images/lol/act/img/js/hero/1.js')
    result = response.json()

    for x in result['skins']:
        name = x['name']
        img_url = x['mainImg']

        if not img_url:
            img_url = x['chromaImg']

        download(img_url,name)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用redisMQ-spring-boot-starter实现消息队列和延时队列

简介 redisMQ-spring-boot-starter是一个轻量级的、基于Redis实现的消息队列中间件&#xff0c;它有如下优点&#xff1a; 开箱即用&#xff0c;你几乎不用添加额外的配置支持消息队列、延时队列&#xff0c;并提供精细化配置参数提供消息确认机制支持虚拟空间&#xff0c;不…

华为算法题 go语言或者ptython

1 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的景区垃圾识别系统(Python+PySide6界面+训练代码)

摘要&#xff1a;本文介绍了一个先进的基于深度学习的景区垃圾检测系统&#xff0c;该系统集成了最新的YOLOv8算法&#xff0c;并与YOLOv7、YOLOv6、YOLOv5等前代算法进行了性能对比&#xff0c;通过对比实验证明了其在图像、视频、实时视频流和批量文件处理中对景区垃圾进行精…

【深度学习笔记】3_1 线性回归

注&#xff1a;本文为《动手学深度学习》开源内容&#xff0c;仅为个人学习记录&#xff0c;无抄袭搬运意图 3.1 线性回归 线性回归输出是一个连续值&#xff0c;因此适用于回归问题。回归问题在实际中很常见&#xff0c;如预测房屋价格、气温、销售额等连续值的问题。与回归问…

HTTP基本概念-HTTP 常见的状态码有哪些?

资料来源 : 小林coding 小林官方网站 : 小林coding (xiaolincoding.com) HTTP 常见的状态码有哪些? 1xx 类状态码属于提示信息&#xff0c;是协议处理中的一种中间状态&#xff0c;实际用到的比较少。 2xx 类状态码表示服务器成功处理了客户端的请求&#xff0c;也是我们最愿…

数据库事物复习

事务 比如说将张三的银行账户拿出一千给李四&#xff0c;首先需要查询张三的账户余额&#xff0c;扣除1000&#xff0c;然后如果给李四加上1000的过程中出现异常会回滚事务&#xff0c;临时修改的数据会回复回去。 -- 1. 查询张三账户余额 select * from account where name …

OpenAI Sora模型,官方技术文档翻译

技术报告地址&#xff1a;https://openai.com/research/video-generation-models-as-world-simulators 本技术报告的重点是&#xff08;1&#xff09;将所有类型的视觉数据转化为统一表示&#xff0c;从而能够大规模训练生成模型的方法&#xff1b;以及&#xff08;2&#xff0…

互联网广告投放与IP地理位置定位

随着互联网的发展和普及&#xff0c;互联网广告投放成为各行业推广营销的重要方式之一。而结合IP地理位置定位技术&#xff0c;可以实现精准定向&#xff0c;提高广告投放的效果和精准度。IP数据云将探讨互联网广告投放与IP地理位置定位的关系&#xff0c;分析其优势和应用场景…

基于springboot+vue的智能物流管理系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

设计模式-创建型模式-原型模式

原型模式&#xff08;Prototype Pattern&#xff09;&#xff1a;使用原型实例指定创建对象的种类&#xff0c;并且通过克隆这些原型创建新的对象。原型模式是一种对象创建型模式。原型模式其实就是从一个对象再创建另外一个可定制的对象&#xff0c;而且不需知道任何创建的细节…

Nginx知识笔记

一、前言 首先&#xff0c;我们来看一张关于正向代理和反向代理的图片 简单理解正向代理和反向代理的概念&#xff1a; 正向代理&#xff1a;在客户端配置代理服务器(和跳板机功能类似&#xff0c;比如公司很多机器需要通过跳板机才允许登录&#xff0c;正向代理的典型用途是…

npmjs官网(查询依赖包)

npmjs官网 可以方便的查看依赖包的安装、使用说明及相关注意事项等。 以wechat-http为例&#xff1a;

1.CSS单位总结

CSS 单位总结 经典真题 px 和 em 的区别 CSS 中的哪些单位 首先&#xff0c;在 CSS 中&#xff0c;单位分为两大类&#xff0c;绝对长度单位和相对长度单位。 绝对长度单位 我们先来说这个&#xff0c;绝对长度单位最好理解&#xff0c;和我们现实生活中是一样的。在我们…

rabbitmq知识梳理

一.WorkQueues模型 Work queues&#xff0c;任务模型。简单来说就是让多个消费者绑定到一个队列&#xff0c;共同消费队列中的消息。 当消息处理比较耗时的时候&#xff0c;可能生产消息的速度会远远大于消息的消费速度。长此以往&#xff0c;消息就会堆积越来越多&#xff0c…

男性美颜SDK解决方案,专属男性美化新体验

随着科技的发展&#xff0c;美颜技术已广泛应用于摄影、社交、直播等领域&#xff0c;满足了用户对美的追求。然而&#xff0c;传统的美颜算法往往更偏向于女性用户&#xff0c;忽视了男性用户对于自然、真实美的需求。美摄科技针对这一市场痛点&#xff0c;推出了专为男性设计…

APP的UI自动化demo(appium+java)

文章目录 appium连接手机java代码实现-第一版第二版-接入testng和隐式等待显示等待 appium连接手机 准备工作 1、查看连接手机模拟器是否连接成功&#xff0c;获取设备名称 执行命令&#xff1a;adb devices 2、查看android内核版本号—>paltformVersion 执行命令&#xf…

NLP 使用Word2vec实现文本分类

&#x1f368; 本文为[&#x1f517;365天深度学习训练营学习记录博客 &#x1f366; 参考文章&#xff1a;365天深度学习训练营 &#x1f356; 原作者&#xff1a;[K同学啊 | 接辅导、项目定制]\n&#x1f680; 文章来源&#xff1a;[K同学的学习圈子](https://www.yuque.com/…

某胜物流软件三个接口sql注入漏洞(附漏洞检测脚本)

免责声明 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的…

云呐矿井智能化运维工是什么?智能机器人运维岗位

煤矿智能运维是指利用先进的信息技术和自动控制&#xff0c;在煤矿生产过程中对煤矿设备进行监测、维护和管理。其职责和工作任务主要包括: 工作环境:  面对复杂的地质条件和极端的气候环境&#xff0c;煤矿智能运维工程师往往需要在地下煤矿、监测中心等环境中工作。因此&a…

2024年【陕西省安全员C证】模拟考试题库及陕西省安全员C证操作证考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 陕西省安全员C证模拟考试题库考前必练&#xff01;安全生产模拟考试一点通每个月更新陕西省安全员C证操作证考试题目及答案&#xff01;多做几遍&#xff0c;其实通过陕西省安全员C证模拟考试题库很简单。 1、【多选题…