Python Request实战:轻松抓取网页数据,获取所需信息
优采云 发布时间: 2023-03-08 23:10Python Request 是一个强大的库,它可以让我们轻松地获取网页数据。在本文中,我们将介绍如何使用 Python Request 抓取网页数据,从而获取所需信息。具体来说,我们将分析以下 10 个方面:
1.简介:Python Request 的基本概念和用途
2.安装:如何安装 Python Request 库
3.请求方法:GET 和 POST 方法的区别及使用场景
4.请求头和请求体:如何设置请求头和请求体
5.参数传递:如何传递2e9b5865537db47267991419e97f0ae9参数和表单参数
6. Cookies 和 Session:如何使用 Cookies 和 Session 来维持登录状态
7.响应对象:如何处理响应对象,包括状态码、响应头、响应体等
8.异常处理:如何处理异常情况,比如网络错误、服务器错误等
9.实战案例:通过实际案例演示 Python Request 的使用方法
10.总结与展望:总结 Python Request 的优点和不足,并展望未来发展方向
安装
在开始之前,需要先安装 Python Request 库。可以通过 pip 命令进行安装:
```
pip install requests
```
如果提示权限不足,可以在命令前加上 sudo。
请求方法
GET 和 POST 是 HTTP 协议中最常用的两种请求方法。GET 方法通常用于获取数据,而 POST 方法通常用于提交数据。下面是 GET 和 POST 方法的使用示例:
```python
import requests
#发送 GET 请求,获取百度首页的 HTML 内容
response = requests.get('https://www.baidu.com')
print(response.text)
#发送 POST 请求,提交表单数据并获取响应结果
data ={'username':'admin','password':'123456'}
response = requests.post('https://www.example.com/login', data=data)
print(response.text)
```
上面的代码中,我们通过 requests.get()和 requests.post()方法发送了 GET 和 POST 请求,并得到了相应的响应对象 response。其中 response.text 属性表示响应内容的字符串形式。
请求头和请求体
HTTP 请求由请求头和请求体两部分组成。请求头包含一些元信息,比如 User-Agent、Accept-Language 等;请求体包含具体的数据内容。
可以通过 headers 参数设置请求头,通过 data 或 json 参数设置请求体。下面是一个示例:
```python
import requests
headers ={
'User-Agent':'Mozilla/5.0(Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'}
data ={'username':'admin','password':'123456'}
response = requests.post('https://www.example.com/login', headers=headers, data=data)
print(response.text)
```
参数传递
在发送 HTTP 请求时,有时需要传递一些参数。比如,在查询天气信息时需要传递城市名称、日期等参数。可以通过 params 参数传递2e9b5865537db47267991419e97f0ae9参数,通过 data 或 json 参数传递表单参数。
```python
import requests
#传递2e9b5865537db47267991419e97f0ae9参数
params ={'city':'北京','date':'2023-03-08'}
response = requests.get('https://www.example.com/weather', params=params)
print(response.text)
#传递表单参数(form 表单)
data ={'username':'admin','password':'123456'}
response = requests.post('https://www.example.com/login', data=data)
print(response.text)
#传递 JSON 格式的参数(JSON 数据)
json_data ={'name':'John','age': 25}
response = requests.post('https://www.example.com/user_info', json=json_data)
print(response.text)
```
Cookies 和 Session
有些网站需要登录才能访问某些页面或接口。为了保持登录状态,需要使用 Cookies 或 Session。
Cookies 是服务器发给客户端的一种标识符,客户端每次访问时都会带上这个标识符。Session 是服务器存储客户端会话信息的一种机制。
可以通过 cookies 参数或 session 对象来管理 Cookies 和 Session。下面是一个示例:
```python
import requests
#使用 cookies 维持登录状态
cookies ={'21d6f40cfb511982e4424e0e250a9557_id':'abcd1234'}
response = requests.get('https://www.example.com/my_profile',9e2adfb8250fd85ace827a36900e11b7=cookies)
print(response.text)
#使用 session 对象维持登录状态
session = requests.Session()
data ={'username':'admin','password':'123456'}
21d6f40cfb511982e4424e0e250a9557.post('https://www.example.com/login', data=data)
response = session.get('https://www.example.com/my_profile')
print(response.text)
```
响应对象
HTTP 响应由状态码、响应头和响应体三部分组成。可以通过 response.status_code、response.headers、response.content 等属性来访问这些信息。
```python
import requests
response = requests.get('https://www.example.com')
print(response.status_code)#输出状态码(200 表示成功)
print(response.headers)#输出响应头信息(字典格式)
print(response.content)#输出二进制格式的响应内容
```
异常处理
在发送 HTTP 请求时可能会出现各种异常情况,比如网络错误、服务器错误等。为了避免程序崩溃,需要对这些异常进行处理。
可以使用 try-except 语句来捕获异常,并对其进行处理。下面是一个示例:
```python
import requests
try:
response = requests.get('http://www.example.com')
response.raise_for_status()#如果返回状态码不是 200,则抛出异常
except Exception as e:
print(e)
```
实战案例
我们将以爬取豆瓣电影 Top250 为例演示 Python Request 的使用方法。
首先打开豆瓣电影 Top250 页面并查看源代码(右键->查看网页源代码),找到电影列表所在标签(<ol class="grid_view">),然后可以编写以下代码来爬取 Top250 的电影列表:
```python
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/58.0.3029.110 Safari/537.36'
}
movies_list=[]#存储电影信息列表
for i in range(10):#循环10次爬取前250条记录
params={'start':i*25,
'filter':''}
r=requests.get(url,headers=headers,params=params)#发送HTTP GET请求
soup=BeautifulSoup(r.content,'html.parser')#解析HTML页面
movies=98a5f537c46e6a2bcd1066ec72b9a612.find_all('div',{'class':'info'})#定位电影信息所在标签
for movie in movies:
title=movie.find_all('a')[0].text.strip()#提取电影标题并去除空格换行符等无关字符
rating=movie.find_all('span',{'class':'rating_num'})[0].text.strip()#提取评分
num=movie.find_all('div',{'class':'star'})[0].find_all('span')[-1].text.strip()[1:-4]#提取评价人数
movies_list.append({'title':title,
'rating':rating,
'num_of_reviewers':num})
for movie in movies_list:#打印所有电影信息记录
print(movie['title'],'/',movie['rating'],'/',movie['num_of_reviewers'])
```
运行以上代码后即可输出 Top250 的所有电影信息记录。
总结与展望
Python Request 是一个非常强大且易于使用的库,它提供了丰富的功能来帮助我们轻松地获取网页数据。无论是简单地获取 HTML 内容还是模拟登录并提交表单数据,在 Python Request 的帮助下都变得非常容易。
当然,Python Request 还有一些不足之处,比如处理*敏*感*词*数据时可能会出现性能问题;同时也存在着反爬虫机制等问题。但总体来说,在未来的发展中它仍然会成为 Web 数据抓取领域中不可或缺的工具之一。