week04day03(爬虫 beautifulsoup4、)

一. 使用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').textinfo = div.select_one('.bd>p').text.strip().split('\n')[-1].strip()time, country, category = info.split('/')score = div.select_one('.rating_num').textcomment_count = div.select('.star>span')[-1].text[:-3]intro = div.select_one('.inq').textall_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.textanalyse_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').textinfo = div.select_one('.bd>p').text.strip().split('\n')[-1].strip()time, country, category = info.split('/')score = div.select_one('.rating_num').textcomment_count = div.select('.star>span')[-1].text[:-3]intro = div.select_one('.inq').textall_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.textanalyse_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:# 因为是图片所有用contentf.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.mzph.cn/news/698035.shtml

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

相关文章

【Python笔记-设计模式】对象池模式

一、说明 用于管理对象的生命周期&#xff0c;重用已经创建的对象&#xff0c;从而减少资源消耗和创建对象的开销 (一) 解决问题 主要解决频繁创建和销毁对象所带来的性能开销问题。如数据库连接、线程管理、网络连接等&#xff0c;对象的创建和销毁成本相对较高&#xff0c…

IC卡批量加密软件使用

IC卡出厂是默认的密码FFFFFFFFFFFF空白卡&#xff0c;IC卡在门禁、电梯、食堂消费、洗浴一卡通等系统上使用前是需要初始化的&#xff0c;即加密的同时写入基础数据。 为什么要用批量加密软件呢&#xff0c;以为需要加密的卡有几百张&#xff0c;几千张&#xff0c;数量比较多&…

shiro 整合 springmvc 实战及源码详解

序言 前面我们学习了如下内容&#xff1a; 5 分钟入门 shiro 安全框架实战笔记 shiro 整合 spring 实战及源码详解 相信大家对于 shiro 已经有了最基本的认识&#xff0c;这一节我们一起来学习写如何将 shiro 与 springmvc 进行整合。 spring mvc 整合源码 maven 依赖 版…

水务界的“数字蝶变”:水务公司重构自我,开启智慧供水新时代

历经六十余载的稳健前行&#xff0c;某水务公司已发展成为国有一档企业中的供水行业佼佼者&#xff0c;不仅主营业务突出&#xff0c;更拥有完善的产业链条。然而&#xff0c;面对供水业务24小时连续作业的高要求&#xff0c;以及业务管理需求的日益复杂化&#xff0c;公司意识…

【Django开发】0到1开发美多shop项目:Celery短信和用户注册。全md文档笔记(附代码,已分享)

本系列文章md笔记&#xff08;已分享&#xff09;主要讨论django商城项目开发相关知识。本项目利用Django框架开发一套前后端不分离的商城项目&#xff08;4.0版本&#xff09;含代码和文档。功能包括前后端不分离&#xff0c;方便SEO。采用Django Jinja2模板引擎 Vue.js实现…

网页403错误(Spring Security报异常 Encoded password does not look like BCrypt)

这个错误通常表现为"403 Forbidden"或"HTTP Status 403"&#xff0c;它指的是访问资源被服务器理解但拒绝授权。换句话说&#xff0c;服务器可以理解你请求看到的页面&#xff0c;但它拒绝给你权限。 也就是说很可能测试给定的参数有问题&#xff0c;后端…

学习Redis基础篇

1.初识Redis 1.认识NoSQL 2.认识Redis 3.连接redis命令 4.数据结构的介绍 5.通用命令 2.数据类型 1.String类型 常见命令&#xff1a;例子&#xff1a;set key value

Vue3实现页面顶部进度条

Vue3页面增加进度条 新建进度条组件新建bar.ts导航守卫中使用 Vue3项目使用导航守卫给页面增加进度条 新建进度条组件 loadingBar.vue <template><div class"wraps"><div ref"bar" class"bar"></div></div> <…

VSCODE上使用python_Django_创建最小项目

接上篇 https://blog.csdn.net/weixin_44741835/article/details/136135996?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22136135996%22%2C%22source%22%3A%22weixin_44741835%22%7D VSCODE官网&#xff1a; Editing Python …

精酿啤酒:麦芽与啤酒花搭配的奥秘

麦芽和啤酒花是啤酒酿造过程中不可或缺的原料&#xff0c;它们的风味和特点对啤酒的口感和品质产生着深远的影响。Fendi Club啤酒在麦芽与啤酒花的搭配方面有着与众不同的技巧和见解&#xff0c;让啤酒的口感更加丰富和迷人。 首先&#xff0c;麦芽的选择是啤酒酿造的关键之一。…

【目标检测新SOTA!v7 v4作者新作!】YOLO v9 思路复现 + 全流程优化

YOLO v9 思路复现 全流程优化 提出背景&#xff1a;深层网络的 信息丢失、梯度流偏差YOLO v9 设计逻辑可编程梯度信息&#xff08;PGI&#xff09;&#xff1a;使用PGI改善训练过程广义高效层聚合网络&#xff08;GELAN&#xff09;&#xff1a;使用GELAN改进架构 对比其他解法…

精通Django模板(模板语法、继承、融合与Jinja2语法的应用指南)

模板&#xff1a; 基础知识&#xff1a; ​ 在Django框架中&#xff0c;模板是可以帮助开发者快速⽣成呈现给⽤户⻚⾯的⼯具模板的设计⽅式实现了我们MVT中VT的解耦(M: Model, V:View, T:Template)&#xff0c;VT有着N:M的关系&#xff0c;⼀个V可以调⽤任意T&#xff0c;⼀个…

百度地图海量点方案趟坑记录(百度地图GL版 + MapVGL + vue3 + ts)

核心需求描述 不同层级有不同的海量图标展示底层海量图标需要展示文字拖动、放大缩小都需要重新请求数据并展示固定地图中心点&#xff08;拖动、放大缩小&#xff0c;中心点始终在地图中心&#xff09; 示例图片&#xff1a;&#xff08;某些图片涉及公司数据&#xff0c;就未…

基础数据结构和算法《》

递归 1.递归应该一种比较常见的实现一些特殊代码逻辑时需要做的&#xff0c;但常常也是最绕的一种方式&#xff0c;在解释递归 之前&#xff0c;我们用循环和递归来做个比较1.1.如果你打开一扇门后&#xff0c;同样发现前方也有一扇们&#xff0c;紧接着你又打开下一扇门...直…

备战蓝桥杯---基础算法刷题1

最近在忙学校官网上的题&#xff0c;就借此记录分享一下有价值的题&#xff1a; 1.注意枚举角度 如果我们就对于不同的k常规的枚举&#xff0c;复杂度直接炸了。 于是我们考虑换一个角度&#xff0c;我们不妨从1开始枚举因子&#xff0c;我们记录下他的倍数的个数sum个&#…

Android platform tool中d8.bat不生效

d8.bat因找不到java_exe文件&#xff0c;触发EOF d8.bat中之前代码为&#xff1a; set java_exe if exist "%~dp0..\tools\lib\find_java.bat" call "%~dp0..\tools\lib\find_java.bat" if exist "%~dp0..\..\tools\lib\find_java.bat" …

分享一个我爱工具网源码优化版

应用介绍 本文来自&#xff1a;分享一个我爱工具网源码优化版 - 源码1688 前几天在网上看到了一个不错的工具网源码&#xff0c;但是源码存在一些问题&#xff0c;遂进行了修改优化。 主要修改内容有&#xff1a; 1、后台改为账号密码登录&#xff0c;上传即用&#xff0c;不…

前后端延迟怎么解决

当今互联网应用的发展越来越迅猛&#xff0c;用户对于网站或应用的性能要求也越来越高。其中一个重要方面就是前后端延迟的解决&#xff0c;也就是减少前端与后端之间的通信时间延迟&#xff0c;提高用户体验。本文将详细介绍如何解决前后端延迟的问题。 网络延迟 数据在网络…

【DAY03 软考中级备考笔记】存储系统,总线系统,输入输出系统和可靠性

存储系统&#xff0c;总线系统&#xff0c;输入输出系统和可靠性 2月22日 – 天气&#xff1a;阴转晴 济南下大雪&#xff0c;居家办公两天。 1. 计算机存储器的分类 根据存储位置划分&#xff1a; 内存/主存&#xff1a;用来保存当前正在运行的程序所需要的数据&#xff0c…

【C++精简版回顾】6.构造函数

一。类的四种初始化方式 1.不使用构造函数初始化类 使用函数引用来初始化类 class MM { public:string& getname() {return name;}int& getage() {return age;}void print() {cout << "name: " << name << endl << "age: &quo…