博客
关于我
Python3学习笔记(urllib模块的使用)
阅读量:798 次
发布时间:2023-03-08

本文共 2437 字,大约阅读时间需要 8 分钟。

使用urllib.request抓取网页内容的实用方法

1. 基本方法

urlopen函数是urllib.request模块中最常用的工具,用于发送HTTP请求并获取网页内容。以下是使用urlopen的基本步骤:

import urllib.request# 示例网址url = r'http://example.com'# 使用urlopen函数获取页面数据response = urllib.request.urlopen(url)# response对象返回的页面数据类型为bytes,需decode转换为字符串page = response.read().decode('utf-8')

urlopen返回对象的操作方法

HTTPResponse对象提供以下操作方法:

  • read(): 读取整个页面内容
  • readline(): 逐行读取内容
  • fileno(): 获取文件描述符
  • close(): 关闭资源
  • info(): 获取HTTP头信息
  • getcode(): 获取HTTP状态码
  • geturl(): 获取请求的URL

2. 使用Request对象

为了实现更复杂的HTTP请求,urllib.request提供了Request对象。通过Request对象可以自定义headers、方法等参数:

import urllib.requestfrom urllib.parse import urlencode# 示例网址url = r'http://example.com/post.php'# 定义HTTP请求头headers = {    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.3978.99 Safari/537.36',    'Referer': 'https://www.example.com',    'Connection': 'keep-alive'}# 创建Request对象req = urllib.request.Request(url, headers=headers)#发送请求并获取响应response = urllib.request.urlopen(req)# 获取页面内容page = response.read().decode('utf-8')

Request对象的应用场景

  • User-Agent: 模拟浏览器访问,避免被检测到爬虫行为
  • Referer: 防止页面跳转时引起的不必要请求
  • Connection: 设置连接类型,通常为keep-alive

3. POST数据提交

要提交POST数据,urlopen函数的data参数可以传递字典数据,通过urlencode函数转换为URL查询字符串:

import urllib.requestfrom urllib.parse import urlencode# 示例网址url = r'http://example.com/form.php'# 定义请求数据data = {    'username': 'admin',    'password': '123456'}# URL编码处理encoded_data = urlencode(data).encode('utf-8')# 发送POST请求req = urllib.request.Request(url, data=encoded_data)# 获取响应response = urllib.request.urlopen(req)# 解码页面内容page = response.read().decode('utf-8')

POST数据的处理注意事项

  • 数据必须以bytes类型提交,使用encode()方法进行转换
  • URL参数需要通过urlencode函数编码处理
  • POST数据通常用于提交表单信息或与服务器进行交互

4. 异常处理

在实际应用中,网络请求可能会遇到错误。我们可以通过try-except块来处理异常:

import urllib.requestfrom urllib.error import HTTPErrordef fetch_page(url):    try:        # 定义请求头        headers = {            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.3978.99 Safari/537.36',            'Referer': 'https://www.example.com'        }                # 创建Request对象        req = urllib.request.Request(url, headers=headers)                # 获取HTTP响应        response = urllib.request.urlopen(req)                # 获取页面内容        page = response.read().decode('utf-8')        return page    except HTTPError as e:        print(f'HTTP错误:{e.code()} - {e.read().decode("utf-8")}')        return None

异常处理的意义

-捕获HTTP错误状态码,避免程序因为异常而

转载地址:http://tflfk.baihongyu.com/

你可能感兴趣的文章
Python基础综合练习
查看>>
python基础篇(4):range语句
查看>>
python基础篇(3):print()补偿知识点
查看>>
python基础篇(2):字符串扩展知识点
查看>>
python基础篇(1):type()
查看>>
python基础篇(15):闭包
查看>>
python基础篇(14):多态
查看>>
python基础篇(12):继承
查看>>
python基础篇(11):封装
查看>>
python基础篇(10):自定义包
查看>>
python基础篇(10):类、对象与构造方法
查看>>
python系列【仅供参考】:python斗地主
查看>>
Python基础教程(第2版 修订版) pdf
查看>>
python基础实践(四)
查看>>
Python基础学习笔记(九)常用数据类型转换函数
查看>>
Python基础学习参考(五):字符串和编码
查看>>
Python基础学习
查看>>
python基础变量之---集合
查看>>
python基础变量之---字典
查看>>
python基础变量之---列表
查看>>