零基础也能看懂的Python爬虫入门教程:如何获取网页源代码及运用requests.get()方法
介绍
本系列主要讲解如何利用python实现网络爬虫。
环境:pycharm 语言:python
我致力于打造普通人也能看懂的python爬虫教程 ,在这个全新的AI智能时代,互联网已经完全融入我们的生活,编程应当成为我们的必要生活技能,而不是程序员的专属,我希望能帮助大家打破信息技术的巨大鸿沟。
关于编程在当今有多么重要,请移步我的上一篇文章大数据时代的你———python网络爬虫(附顶点小说爬虫源代码)-CSDN博客
本文主要讲解如何获取网页源代码以及网页html架构相关知识,还不懂网页源代码是啥以及为什么要获取网页源代码的读者请先阅读我的上一篇文章普通人也看得懂的Python 爬虫教程—————网络数据传输及相关库的导入-CSDN博客
做了如此之全面的准备工作后,我们终于可以开始着手编写我们的第一个爬虫了!
requests库的基本用法
首先,我们需要导入requests,如下
import requests
本文,我们主要了解requests库的get方法(此后我们一般也只需要用到requests的get方法)学习如何获取网页源代码。
这里,我们以获取百度首页源代码为例
网址是:https://www.baidu.com
读者可以先打开这个网页,点击键盘上的F12键或者右键找到并点击查看网页源代码选项卡,这里你可以看到这个网页的源代码,这就是我们的目标(至于为什么不直接复制的原因在我的上一篇文章也详细阐述了,这样难以实现自动化)
现在看到源代码的读者肯定被密密麻麻的html代码给吓住了,不急,我们稍后介绍相关知识。
现在,我们先明确我们的目标,我们需要的是百度首页的网页源代码,那么,作为初学者,我们暂且只需要知道网址就行,但后面我们会发现,服务器常常识别了我们的爬虫身份从而拒绝来自我们ip的请求,因此我们需要一些伪装,但今天,我们只讲源代码的获取。
ok,直接上代码。
url = 'https://www.baidu.com'
respons = requests.get(url)
在这段代码中,我们先将网址以字符串保存在名为“url”的变量名下,在以传参的形式传给requests.get()函数,而不是直接将网址填入get()方法,这是为了提高代码的灵活性和可拓展性,这在之后的实例会再次提到。
那么,接下来让们详细学习requests.get()方法。
如何学习一个新的函数?
授人以鱼不如授人以渔,我想将我总结的学习一个新函数的方法教给大家,不感兴趣的读者可直接跳过。
学习一个新的函数方法,我们首先应大致了解这是做什么用的,但一般情况,我们都是先知道我们需要能实现什么功能的模块,然后在查找相关资料进行学习,也就是说,我们已经提前了解了该函数是用于什么领域的,例如requests库主要是用来实现网络爬虫的,pygame是用来开发游戏的等。
接着,我认为是极其重要的一步,了解该函数有哪些参数,这直接决定了我们能否发挥一个函数方法的最大价值,例如,大家都知道print()函数用于打印内容,但大多数初学者都没有想过,为什么连用两个print(),打印的内容在不同行,而不是接着前面的内容继续打印呢?事实上,print()有一个默认参数“end”,它默认值为“\n”换行符,所以,我们平时使用的print()实际省略了end='\n',补全如下
print("Hello world!", end='\n')
假若我们不需要换行,因为我们需要在一些特定的地方换行,我们可以写出end并将参数改为空字符串,具体用法可以Deepseek一下。
最后,还需要知道这个函数的返回是什么或者无返回,这是容易被忽视的一点。
当然,重要的是勤加练习,加强理解。
学习requests.get()
首先,大家应该都知道这个函数的用途是通过get方法获取网页源代码,网络数据的传输方法之前也介绍过了,以后会更加深入。
get()方法的常见参数如下:
1. url (必需):目标请求的 URL 地址。
2.params :字典或列表,作为 URL 查询参数附加到 URL 后面。
3.headers :自定义请求头(如 User-Agent 、 Authorization 等)。
4.cookies :字典或列表,随请求发送的 Cookie 数据。
5.timeout :设置请求超时时间(秒),默认无限制。
6.auth :( username , password ),用于基本身份验证。
7.verify :布尔值,默认 True ,控制是否验证 SSL 证书。
8. proxies :字典或列表,指定代理服务器(如 "http://10.10.1.10:3128" )。
9.data :字典/列表/字节,发送到服务器的数据(GET 请求中会转为查询参数)。
10.files :字典,用于文件上传( {'file': open('file.txt')} )。
11.json :JSON 格式数据,自动设置 Content-Type: application/json 。
12.allow_redirects :布尔值,默认 True ,是否允许重定向跟随。
13.max_retries :重试次数(需配合 urllib3 的 Retry 策略使用)。
14.stream :布尔值,默认 False ,是否流式传输响应体(大文件下载时使用)。
15.chunked :布尔值,默认 False ,是否启用分块传输编码。
16.preload_content :布尔值,默认 True ,是否提前加载响应内容到内存。
17.decode_unicode :布尔值,默认 True ,是否自动解码响应内容编码。
这里建议读者将这些参数都运用一次,目前只需掌握url,相信聪明如你已经掌握了。
最后说明该方法得到一个返回值,知这是我们需要的关键信息,该模块的方便之处就在于它将服务器返回的数据打包在一个名为respons的对象中,还没有学习pyhton类的读者不用担心,我在这里打个比方,
url = 'https://www.baidu.com'
respons = requests.get(url)
以上面的代码为例,我们使用get方法实际上是向该服务器发送了一个GET请求,而服务器返回的数据都被装在一个requests库设计者精心设计的小盒子里,他们把这一类小盒子命名为response,接着,我们将这个小盒子赋值给response参数,相当于给它一个名字,注意,为方便理解,我将参数名设计为response,其实可以是任何变量名。这个盒子里装着我们需要的信息,如请求的方式,状态码,初始url,还有我们心心念念的网页源代码,访问这些数据的方式很简单,格式如下:
变量名.属性(也就是response对象共有的属性)
请看实例:
这样我们就将response中名为text的属性也就是网页源代码赋值给source了,注意,这里获得的源代码是用Unicode字符集编码的,我们需要转为一般的“utf-8”字符集,就像这样:
url = 'https://www.baidu.com'
respons = requests.get(url)
source = response.text.decode() //这里decode()默认转为utf-8编码
字符集我将在后续介绍,大家暂时先知道这样获得源代码就行。
现在我们已经将源代码获取并保存在source变量名下了,大家可以使用print()打印看看。
ok,那么,结合实际项目,我们回到这段顶点小说的部分代码,完整代码请看大数据时代的你———python网络爬虫(附顶点小说爬虫源代码)-CSDN博客
def get_source(url,header,verify):
session = requests.Session()
source = session.get(url, headers=header, verify=verify).text
return source
在实际应用中,我们可能需要多次获取多个网页的源代码,那么,我们可以将发送请求并获取源代码的操作打包为一个函数,以上我使用了requests的Session()类,用于管理全局header 和 cookie。我们可以简化一下:
def get_source(url):
source = requests.get(url).text
return source.decode()
这样,我们得到了一个名为get_source()的函数,传入url,返回网页源代码,可以调用它获取百度首页源代码更加方便:
url = "https://www.baidu.com"
source = get_source(url)
优秀程序应当具备良好的可拓展性和简洁性。
下一篇文章我会讲解网页的基础架构和html的基础知识,以便解析源代码并快速寻找和提取信息。
创作不易,点个赞吧!
作者:2a.