编程小白的自学笔记九(python爬虫入门+代码详解)

news2024/12/22 17:04:56

系列文章目录

编程小白的自学笔记八(python中的多线程)

编程小白的自学笔记七(python中类的继承) 

 编程小白的自学笔记六(python中类的静态方法和动态方法) 

编程小白的自学笔记五(Python类的方法) 

编程小白的自学笔记四(正则表达式模块search函数) 


目录

  • 系列文章目录

    前言

    一、使用get方法请求数据

    二、爬取酷狗音乐排行榜

    总结


前言

很多小白都是听说python可以很好的编写爬虫脚本慕名而来,我也是,终于学到爬虫部分了,前面的html语言,客户端和服务器的交互等基础就不赘述了,直接进入主题。


一、使用get方法请求数据

开发网络爬虫需要第三方模块requests,我们需要安装,语法如下:

Pip install requests

安装完成后,使用其中的get方法就可以返回结果,其功能等同于我们在浏览器输入网址,然后服务器返回一个页面给我们一样 。

requests库的get方法是用于向服务器发送GET请求的。它的完整参数如下:

  • url:请求的URL地址。
  • params:查询字符串,用于传递参数。
  • headers:请求头信息。
  • cookies:Cookie信息。
  • proxies:代理服务器地址。
  • timeout:超时时间。
  • verify:是否验证SSL证书。

 下面我们看一个小例子:

import requests
url = 'http://www.baidu.com'
try:
    req = requests.get(url)
    print(req.text)
except:
print('查询失败')

代码还是很简单的,返回的结果是:

<!DOCTYPE html>

<!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css><img src=//www.baidu.com/img/gs.gif> </p> </div> </div> </div> </body> </html>

返回的内容比较多,我删除了中间的一些代码,这个就是网站的源码。我可以看出,只要给get方法传递一个url地址就行。 

二、爬取酷狗音乐排行榜

下面就进入真正的实战了,爬取酷狗音乐排行榜数据,网址是酷狗TOP500_排行榜_乐库频道_酷狗网,可以看到网页上对歌曲进行了排名。

 

我们右击鼠标打开检查选项,可以找到歌曲信息在Html中的位置,可以看出歌曲名称和演唱者都在<li>元素的title属性中,如果我们通过get方法获取了网页的全部内容,就可以使用正则表达式提取出我们需要的信息。

 

下面是实战代码

import requests
import re
url = 'https://www.kugou.com/yy/rank/home/1-8888.html'
try:
    req = requests.get(url)
    songs = re.findall(r'<li.*?title="(.*?)".*?>',req.text)
    for song in songs:
        print(song)
except:
    print('查询失败')

 程序运行成功,但不是我们想要的结果,返回的是空,也就是说没有匹配到结果,为此,我增加了代码print(req.text),看看我们获取到的返回结果是什么。

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<meta http-equiv="X-UA-Compatible" content="IE=edge">

<meta name="viewport" content="width=device-width, initial-scale=1">

<title>403 Forbidden</title>

<style type="text/css">body{margin:5% auto 0 auto;padding:0 18px}.P{margin:0 22%}.O{margin-top:20px}.N{margin-top:10px}.M{margin:10px 0 30px 0}.L{margin-bottom:60px}.K{font-size:25px;color:#F90}.J{font-size:14px}.I{font-size:20px}.H{font-size:18px}.G{font-size:16px}.F{width:230px;float:left}.E{margin-top:5px}.D{margin:8px 0 0 -20px}.C{color:#3CF;cursor:pointer}.B{color:#909090;margin-top:15px}.A{line-height:30px}.hide_me{display:none}</style>

</head>

<body>

<div id="p" class="P">

<div class="K">403</div>

<div class="O I">Forbidden</div>

<p class="J A L">Error Times: Fri, 23 Jun 2023 06:40:43 GMT

<br>

<span class="F">IP: 60.174.21.124</span>Node information: CS-000-01uyG161

<br>URL: https://www.kugou.com/yy/rank/home/1-8888.html

<br>Request-Id: 64953e6b_CS-000-01uyG161_35678-151

<br>

<br>Check:

<span class="C G" onclick="s(0)">Details</span></p>

</div>

<div id="d" class="hide_me P H">

<div class="K">ERROR</div>

<p class="O I">The Requested URL could not be retrieved</p>

<div class="O">

<div>While trying to retrieve the URL:</div>

<pre class="B G">https://www.kugou.com/yy/rank/home/1-8888.html</pre></div>

<div class="M">

<span>The following error was encountered:</span>

<ul class="E">

<li class="D G">Invalid Request</li></ul>

</div>

<p class="M">The access control configuration prevents your request at this time.

<p></p>Please contact your service provider if you feel this is incorrect.</p>

<a class="N C" href="#" onclick="s(1)">return</a></div>

<script type="text/javascript">function e(i) {

return document.getElementById(i);

}

function d(i, t) {

e(i).style.display = (t ? 'block': 'none');

}

function s(e) {

d('p', e);

d('d', !e);

}</script>

</body>

</html>

可以看到,并没有歌手和歌曲内容,应该是搜狗网站进行了一些反爬。于是我们在get里面加上headers={'user-agent':'chrome'},来模拟浏览器访问,代码如下: 

import re
url = 'https://www.kugou.com/yy/rank/home/1-8888.html'
try:
    req = requests.get(url,headers={'user-agent':'chrome'})
    # print(req.text)
    songs = re.findall(r'<li.*?title="(.*?)"',req.text)
    for song in songs:
        print(song)
except:
print('查询失败')

这次成功返回我们要的结果:

苏星婕 - 听悲伤的情歌

指尖笑 - 不问ciaga

郭顶 - 凄美地

一只白羊 - 等不到的你

任夏 - 悲伤的爱情

张靓颖、王赫野 - 是你 (Live)

Mae Stephens - If We Ever Broke Up (Explicit)

Kui Kui - 宝贝在干嘛

张紫豪 - 可不可以

周杰伦 - 说好的幸福呢

周杰伦 - 晴天

汪苏泷、吉克隽逸 - Letting Go (Live)

承桓 - 我会等

蔡健雅 - Letting Go

任夏 - 失眠情歌 (Live合唱版)

苏星婕 - 吹着晚风想起你

周杰伦 - 我落泪情绪零碎

云狗蛋 - 天若有情

程响 - 可能

A-Lin - 天若有情

RE-D、是二哈ya、masta - 肯定

G.E.M. 邓紫棋 - 喜欢你

我们来详细分析下:

  1. 用get方法获取网页内容。这个内容和最开始介绍的内容一样,get方法向服务器发送请求,服务器返回数据。
  2. 增加headers参数。我们第一次没有得到想要的结果,是网站增加了限制,目的就是用来验证请求是不是正常浏览器发出的,第一次我们的请求明显被服务器发现不正常了,于是我们增加了headers参数,内容为{'user-agent':'chrome'},意思就是浏览器类型为谷歌浏览器,这下骗过了服务器。
  3. 使用正则匹配我们想要的结果。使用正则我们需要先导入re模块,原始网页内容为<li class=" " title="苏星婕 - 听悲伤的情歌" data-index="0" data-eid="8id4200b">,那么我们只需要匹配以<li开头,内含有title=""的语句就行,那就可以这样写正则表达式<li.*?title="(.*?)",.*?代表除换行以外的其他元素,表达式的返回结果是子表达式的内容,正好是歌手加歌曲。

总结

requests库是一个Python的第三方库,用于发送HTTP请求。它提供了简单易用的API,可以方便地实现各种HTTP请求操作,如GET、POST、PUT、DELETE等。

requests库的主要特点如下:

1. 简单易用:requests库的API设计简洁明了,易于上手使用。
2. 灵活性高:requests库支持多种HTTP请求方法和参数设置,可以根据需要进行灵活配置。
3. 性能优异:requests库采用了高效的HTTP协议解析器和连接池技术,可以提高请求的响应速度和稳定性。
4. 支持多种数据格式:requests库可以处理JSON、XML、HTML等多种数据格式,并提供了丰富的解析器和转换器。
5. 跨平台兼容性好:requests库可以在Windows、Linux、Mac OS等多个操作系统上运行,并且支持Python 2.x和Python 3.x版本。

总之,requests库是一个非常实用的HTTP请求工具,可以帮助开发者快速实现各种网络请求操作。

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

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

相关文章

【Unity面试篇】Unity 面试题总结甄选 |网络相关 | ❤️持续更新❤️

前言 关于Unity面试题相关的所有知识点&#xff1a;&#x1f431;‍&#x1f3cd;2023年Unity面试题大全&#xff0c;共十万字面试题总结【收藏一篇足够面试&#xff0c;持续更新】为了方便大家可以重点复习某个模块&#xff0c;所以将各方面的知识点进行了拆分并更新整理了新…

git命令将一个项目推送到多个远程仓库

一、查看远程仓库(已经有一个仓库的地址)输入下面命令进行查看 git remote -v二、把项目添加到另外一个远程仓库的地址(git remote add 仓库名称 仓库地址) git remote add gitee http://git.XXXX.com/XXX/XXX.git/三、此时已经把项目添加到另外一个远程仓库了可以通过命令gi…

Java+Vue+Uniapp全端WMS仓库管理系统

详情图片为运行截图,功能列表: 1、数据管理:物料数据管理、物料Bom管理、物料组管理、物料分类管理、供应商管理、仓库管理、货位管理、车间管理 2、采购管理:物料标签管理、入库单管理、入库退货管理 3、质检管理:质检单管理(包括单据号、单据类型、创建时间、检验状态…

华为OD机试真题 JavaScript 实现【人民币转换】【牛客练习题】

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、JavaScript算法源码 专栏导读 本专栏收录于《华为OD机试&#xff08;JavaScript&#xff09;真题&#xff08;A卷B卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有详细的答题…

【算法基础】进制转换

一、X进制转十进制 (一)Question 1. 问题描述 2. Input 第一行一个整数 x; 第二行一个字符串 S。 3. Output 输出仅包含一个整数,表示答案。 4. Sample Input 16 7B5. Sample Output 123(二)题解 #include <bits/stdc++.h> using

ArcGIS、ENVI、InVEST、FRAGSTATS等多技术融合提升

专题一 空间数据获取与制图 1.1 软件安装与应用讲解 1.2 空间数据介绍 1.3海量空间数据下载 1.4 ArcGIS软件快速入门 1.5 Geodatabase地理数据库 专题二 ArcGIS专题地图制作 2.1专题地图制作规范 2.2 空间数据的准备与处理 2.3 空间数据可视化&#xff1a;地图符号与注…

宝塔Linux面板安装Composer依赖管理工具与PHP依赖包的方法

最近看见腾讯云有一个AI绘画还挺有意思&#xff0c;想搞来写个接口玩 但是Composer一直运行不成功 提示xdebug什么的 最后经过搜索 发现 需要删除你宝塔里所有php中禁用的putenv函数 然后重启php就可以了&#xff01; 然后就可以运行这个命令了 出现这种情况 还需要删除所有…

MySQL创建索引的方式详解、索引的删除、MySQL8.0降序索引

1、索引创建的方式 方式1&#xff1a;创建表时指定索引列方式2&#xff1a;使用ALTER TABLE创建索引方式3&#xff1a;使用CREATE TABLE创建索引 2、表中索引查看的方式 方式1&#xff1a;使用语句 SHOW INDEX FROM 表名; 语句查看表中的索引 如&#xff1a; 方式2&#x…

UG\NX二次开发 获取对象的边界包容盒 UF_MODL_ask_bounding_box

文章作者:里海 来源网站:https://blog.csdn.net/WangPaiFeiXingYuan 简介: 获取对象的边界包容盒 UF_MODL_ask_bounding_box,只能得到绝对坐标系下的边界包容盒,速度快,结果不精确。 效果: 代码: //UF_MODL_ask_bounding_box #include "me.hpp" #include &…

发布项目管理生产的时候出现界面滚动不了

新的项目管理发布后出现页面鼠标上下滚动不了的问题&#xff0c;比较奇怪的是&#xff0c;本地开发没有问题&#xff0c;但发布生产后就出现问题了。 因为这次增加的组件比较多&#xff0c;相应的样式也比较多&#xff0c;所以那先分几个部分处理 1、先新加的几个组件是否有冲…

浅谈物联网在电力行业的应用

摘要&#xff1a;随着社会经济的快速发展&#xff0c;物联网技术也在各个行业中得到了广泛的应用&#xff0c;特别是在电力行业中应用物联网技术&#xff0c;也有效的促进了电力行业的现代化发展。而物联网与智能电网同样都是当代重要的高新技术以及新兴产业。所以通过对于物联…

3Ds max入门教程:逼真的细菌

推荐&#xff1a; NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 最终图像 在本教程中&#xff0c;您将学习如何创建一个异国情调的细菌世界。主要重点将是制造使一切变得不同的材料。 步骤-1 遵循红色、绿色和橙色框参数。 步骤-2 在“渲染场景”&#xff08;F10&…

Web训练项目相关

一、简述 一直没有机会整理前面做过的内容&#xff0c;特此文章整理所学过的web相关训练内容,方便查阅&#xff0c;并在其中参杂对代码理解。 二、相关项目 1.getparameter的url传值 index.jsp <% page language"java" contentType"text/html; charsetu…

概率论的学习和整理16: 泊松分布(未完成)

目录 简单的扩展到泊松分布 比较整体的动态过程&#xff0c;增加实验次数时 当二项分布&#xff0c;n很大&#xff0c;p很小的时候&#xff0c;会趋向泊松分布 当n足够大时&#xff0c;二项分布趋向于正态分布。这个结论在概率论中被称为中心极限定理&#xff0c;它是概率论中一…

【剑指offer】14. 数值的整数次方(java)

文章目录 数值的整数次方描述示例1示例2示例3思路完整代码 数值的整数次方 描述 实现函数 double Power(double base, int exponent)&#xff0c;求base的exponent次方。 注意&#xff1a; 1.保证base和exponent不同时为0。 2.不得使用库函数&#xff0c;同时不需要考虑大…

家政小程序开发-H5+小程序

移动互联网的发展&#xff0c;微信小程序逐渐成为商家拓展线上业务的重要手段。家政服务作为日常生活中不可或缺的一部分&#xff0c;也开始尝试通过小程序来提高服务质量和效率。 下面是一篇关于家政小程序开发的H5小程序的文章&#xff0c;希望对您有所帮助。 家政服…

【大虾送书第二期】《Python机器学习:基于PyTorch和Scikit-Learn 》

目录 ✨写在前面 ✨亲笔作序推荐 ✨内容简介 ✨学完本书&#xff0c;你将能够 ✨作者简介 ✨PyTorch核心维护者亲笔推荐 ✨抢先购买 &#x1f990;博客主页&#xff1a;大虾好吃吗的博客 &#x1f990;专栏地址&#xff1a;免费送书活动专栏地址 写在前面 近年来&#xff0c;…

nginx日志分析,实时可视化工具goaccess

一款可以实时分析NGINX访问日志&#xff0c;并且支持可视化的软件 GoAccess - Visual Web Log Analyzer github如下&#xff1a;GitHub - allinurl/goaccess: GoAccess is a real-time web log analyzer and interactive viewer that runs in a terminal in *nix systems or th…

精通从入门到工程应用 PLC:

PLC&#xff08;可编程逻辑控制器&#xff09;的学习和入门相对容易&#xff0c;但其难点在于实际的工程应用。学习PLC并熟悉其基本操作并不复杂&#xff0c;但真正掌握其在实际工程中的应用需要更多的经验和实践。 PLC的实际工程应用与具体项目紧密相关&#xff0c;需要了解信…

一套完全开源,支持多租户,界面配置单点的后端框架JVS

JVS的多租户体系统 在IT系统中&#xff0c;“租户”&#xff08;tenant&#xff09;通常用于指代一种多租户架构&#xff08;multi-tenancy&#xff09;&#xff0c;它是一种软件架构模式&#xff0c;允许多个用户或组织共享相同的应用程序或系统实例&#xff0c;但彼此之间的…