编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

Python用requests库爬取网页内容,小白也能秒懂

wxchong 2025-07-07 23:46:42 开源技术 4 ℃ 0 评论

在如今这个数据爆炸的时代,互联网上的信息犹如一座巨大的宝藏,等待着我们去挖掘。对于Python爱好者来说,使用requests库进行网页内容爬取,无疑是开启这座宝藏的一把钥匙。今天,我就来手把手教大家如何用Python的requests库,轻松实现网页内容的爬取,哪怕你是编程小白,也能轻松上手!

一、requests库是什么?

requests库是Python的一个第三方库,专门用于处理HTTP请求。简单来说,它能让你通过Python代码向网站服务器发送请求,获取网页的内容,就像你在浏览器中输入网址后看到的网页一样。它的优点非常多,比如简单易用、功能强大,而且有丰富的文档支持,这也是为什么它成为了Python爬虫领域的首选库之一。

二、安装requests库

在开始爬取之前,首先要确保你的Python环境中已经安装了requests库。如果你还没有安装,不用担心,安装过程非常简单。打开你的命令行工具(Windows用户可以使用cmd,Mac和Linux用户可以使用终端),输入以下命令:

pip install requests

等待安装完成,就可以开启我们的爬虫之旅啦!

三、发送GET请求,获取网页内容

(一)基础GET请求

获取网页内容最基本的方式就是发送GET请求。来看一个简单的例子:

import requests

# 要爬取的网页URL

url = 'https://www.example.com'

# 发送GET请求

response = requests.get(url)

# 检查请求是否成功

if response.status_code == 200:

# 获取网页内容

content = response.text

print(content)

else:

print(f'请求失败,状态码:{response.status_code}')

在这段代码中:

o 首先,我们导入了requests库。

o 然后,定义了要爬取的网页URL。

o 接着,使用requests.get()方法发送GET请求,并将返回的响应对象存储在response变量中。

o 通过检查response.status_code是否等于200来判断请求是否成功。如果成功,就可以通过response.text获取网页的文本内容并打印出来;如果失败,就打印出失败的状态码。

(二)设置请求头(Headers)

有些网站为了防止爬虫,会对请求头进行检查。如果请求头不符合要求,可能会拒绝我们的请求。这时候,就需要设置请求头来伪装成浏览器访问。下面是一个设置请求头的例子:

import requests

url = 'https://www.example.com'

# 设置请求头,模拟浏览器

headers = {

'User - Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'

}

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

if response.status_code == 200:

content = response.text

print(content)

else:

print(f'请求失败,状态码:{response.status_code}')

在这个例子中,我们定义了一个headers字典,其中User - Agent字段模拟了Chrome浏览器的请求头。然后在发送GET请求时,将headers作为参数传入。这样,网站就会认为我们是通过浏览器访问的,从而提高请求成功的几率。

四、发送POST请求

除了GET请求,有时候我们还需要发送POST请求,比如向网站提交表单数据。来看一个发送POST请求的例子:

import requests

url = 'https://www.example.com/post'

# 要提交的数据

data = {

'username': 'your_username',

'password': 'your_password'

}

response = requests.post(url, data=data)

if response.status_code == 200:

content = response.text

print(content)

else:

print(f'请求失败,状态码:{response.status_code}')

在这个例子中:

o 定义了POST请求的URL。

o 准备了要提交的数据,存储在data字典中。

o 使用requests.post()方法发送POST请求,将url和data作为参数传入。同样,通过检查状态码来判断请求是否成功,并获取响应内容。

五、处理响应数据

(一)获取响应状态码

在前面的例子中,我们已经用到了response.status_code来检查请求是否成功。状态码为200表示请求成功,其他常见的状态码还有404(页面未找到)、500(服务器内部错误)等。通过判断状态码,我们可以知道请求的结果,并做出相应的处理。

(二)获取响应头信息

除了响应内容,有时候我们还需要获取响应头信息,比如服务器类型、内容类型等。可以通过response.headers来获取响应头:

import requests

url = 'https://www.example.com'

response = requests.get(url)

if response.status_code == 200:

headers = response.headers

for key, value in headers.items():

print(f'{key}: {value}')

else:

print(f'请求失败,状态码:{response.status_code}')

这段代码会遍历响应头信息,并打印出每一个键值对。

(三)处理JSON格式的响应数据

如果服务器返回的是JSON格式的数据,requests库提供了非常方便的方法来处理。假设我们有一个返回JSON数据的API:

import requests

url = 'https://jsonplaceholder.typicode.com/posts/1'

response = requests.get(url)

if response.status_code == 200:

data = response.json()

print(data)

else:

print(f'请求失败,状态码:{response.status_code}')

在这个例子中,使用response.json()方法将响应内容解析为Python的字典对象,这样就可以方便地对数据进行处理了。

六、异常处理

在网络请求过程中,可能会遇到各种异常情况,比如网络连接失败、请求超时等。为了使我们的爬虫程序更加健壮,需要对这些异常进行处理。来看一个包含异常处理的例子:

import requests

url = 'https://www.example.com'

try:

response = requests.get(url, timeout=5)

response.raise_for_status()

content = response.text

print(content)

except requests.exceptions.RequestException as e:

print(f'请求发生异常:{e}')

在这段代码中:

o 使用try - except语句来捕获异常。

o 在发送请求时,设置了timeout参数为5秒,表示如果5秒内没有得到响应,就会抛出异常。

o response.raise_for_status()方法会在状态码不是200时抛出异常,这样可以更全面地处理请求失败的情况。

七、实战案例:爬取豆瓣电影Top250

理论知识讲了这么多,下面来一个实战案例,让大家更好地理解和掌握requests库的使用。我们以爬取豆瓣电影Top250为例:

import requests

from bs4 import BeautifulSoup

url = 'https://movie.douban.com/top250'

headers = {

'User - Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'

}

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

if response.status_code == 200:

soup = BeautifulSoup(response.text, 'html.parser')

movie_list = soup.find_all('div', class_='item')

for movie in movie_list:

rank = movie.find('em').text

title = movie.find('span', class_='title').text

rating = movie.find('span', class_='rating_num').text

quote = movie.find('span', class_='inq')

quote = quote.text if quote else '无'

print(f'排名:{rank},电影名:{title},评分:{rating},简介:{quote}')

else:

print(f'请求失败,状态码:{response.status_code}')

在这个案例中:

o 首先发送GET请求获取豆瓣电影Top250页面的内容。

o 使用BeautifulSoup库解析HTML内容(BeautifulSoup库需要提前安装,安装命令:pip install beautifulsoup4 )。

o 通过find_all()方法找到所有包含电影信息的div标签。

o 再从每个div标签中提取电影的排名、标题、评分和简介等信息,并打印出来。

八、注意事项

1. 遵守网站规则:在进行网页爬取时,一定要遵守网站的robots.txt协议。这个协议规定了哪些页面可以被爬虫访问,哪些不可以。如果违反协议,可能会导致你的IP被封禁。

2. 避免频繁请求:过于频繁地向网站发送请求可能会给网站服务器造成压力,也容易被网站识别为恶意爬虫。可以在请求之间设置适当的时间间隔,比如使用time.sleep()函数。

3. 数据使用合规:爬取到的数据要合法使用,不要用于商业用途或侵犯他人隐私等违法行为。

通过以上的学习,相信大家已经掌握了Python使用requests库爬取网页内容的基本方法。爬虫技术是一把双刃剑,合理使用可以帮助我们获取有价值的信息,但如果滥用,可能会带来法律风险。希望大家在学习和实践的过程中,始终遵守法律法规和道德准则,让爬虫技术为我们的生活和工作带来更多的便利!

如果在学习过程中有任何问题,欢迎在评论区留言,我会尽力为大家解答。觉得这篇文章对你有帮助的话,别忘了点赞、收藏和分享哦!也欢迎关注我的账号,获取更多Python学习干货。

#python自学##python自学##我的宝藏兴趣##万能生活指南#

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表