爬虫-get请求

本文是作者张晨的学习笔记,介绍了Python爬虫中GET请求的使用。涉及urllib库的urlopen方法、编码处理,以及requests库的简单应用。文中通过示例展示了如何进行基本的网页抓取、携带headers、参数以及使用代理IP进行请求,并提供了一个百度数据实战案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我是张晨,一转眼,我在新课已经学习了很长一段时间。回顾这几个月的时间,我收获了很多知识。这里是我的一点学习笔记。
一、urllib了解与使用

urllib是一个功能强大、条例清晰、用于HTTP客户端的Python库。它提供了许多Python标准库里所没有的特性:压缩编码、连接池、线程安全、SSL/TLS验证、HTTP和SCOCKS代理等。

# 更新pip
python -m pip install --upgrade pip

# 下载urllib模块
pip install urllib3

# 更新模块
pip install -U urllib3

# 使用清华源进行下载
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple urllib3
pip install urllib3 -i https://pypi.tuna.tsinghua.edu.cn/simple 

1.使用**urlopen( )**方法爬取网页源代码,url参数用于指定要请求的URL路径(未指定data参数时,默认使用GET请求方法)

示例:

import urllib.request  # 导入urllib的请求模块

# 使用urlopen方法请求网址 默认使用get请求
response = urllib.request.urlopen("https://www.python.org")

# 读取请求的数据 字节数据
print(response.read())

运行结果:

image-20230518133023766

2.urllib 编码

示例代码:

# https://www.baidu.com/s?wd=%E6%95%B0%E6%8D%AE

# parse.urlencode(字典数据)  # 将数据进行编码
# parse.unquote()  # 将数据进行解密

from urllib import parse

# 编码 将“wd=数据”转换为键值对
data = {'wd': '数据'}
print(parse.urlencode(data))

# 解密
print(parse.unquote('%E6%95%B0%E6%8D%AE'))
print(parse.unquote('https://www.baidu.com/s?wd=%E6%95%B0%E6%8D%AE'))

运行结果:

image-20230518133306731

urllib百度贴吧完整案例:

from urllib import request, parse

# 请求网址
url = 'https://tieba.baidu.com/f'
# 请求头
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0',
}
# 携带参数
param = {
    'kw':'%E7%8E%8B%E8%80%85%E8%8D%A3%E8%80%80'
}
data = bytes(parse.urlencode(param), encoding='utf-8') # 对携带的参数进行编码
req = request.Request(url=url, data=data, headers=headers, method='GET')  # 发起请求

response = request.urlopen(req)
print(response.read().decode('utf-8'))

运行结果:

image-20230518133500356

二、requests简介

requests是一个很实用的Python HTTP客户端库,编写爬虫和测试服务器响应数据时经常会用到,Requests是Python语言的第三方的库,专门用于发送HTTP请求

# pip install requests 在命令窗口或者终端安装请求模块
# Requests响应
r.status_code # 响应状态码
r.heards # 响应头
r.cookies # 响应cookies
r.text # 响应文本
r.json() # 转换为json数据
r.encoding # 当前编码
r.content # 以字节形式(二进制)返回

requests使用

示例:

import requests
url = 'https://tieba.baidu.com/f'
html = requests.get(url)  # get 请求方式
print(html.status_code)

运行结果:

image-20230518134221405

三、get请求

示例:

import requests
url = 'https://tieba.baidu.com/f'
html = requests.get(url)  # get 请求方式
html.encoding = 'utf-8' # 解决数据乱码
print(html.text)
html.close()

运行结果:

image-20230518134724689

四、携带headers的请求

示例:

import requests

url = 'https://tieba.baidu.com/f'
head_data = {
    # 字典,需要有一个键值对
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36'
}
html = requests.get(url,headers=head_data)
html.encoding = 'utf-8' # 解决数据乱码
print(html.text)

html.close()

运行结果:

image-20230518135003728

五、携带参数的请求

示例:

import requests

url = 'https://tieba.baidu.com/f'
head_data = {
    # 字典,需要有一个键值对
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36'
}
data = {
    'kw':'%E7%8E%8B%E8%80%85%E8%8D%A3%E8%80%80'
}
html = requests.get(url,params=data,headers=head_data)
html.encoding = 'utf-8' # 解决数据乱码
print(html.text)

html.close()

运行结果:

image-20230518135136008

六、携带代理IP

代理获取网站:https://www.hailiangip.com/tool/page/getip

import requests
url = 'http://httpbin.org/ip'
head_data = {
    # 字典,需要有一个键值对
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36'
}
proxies = {
    'http': 'ip:port',
}
html = requests.get(url, proxies=proxies, headers=head_data)
print(html.text)

七、百度数据实战

示例:

import requests

url = 'https://www.baidu.com/s?wd=%E5%A3%81%E7%BA%B8'
head_data = {
    # 字典,需要有一个键值对
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36'
}
html = requests.get(url, headers=head_data)
print(html.text)

f = open('百度数据.txt', 'w+', encoding='utf-8')  # 把数据保存到文件中
f.write(html.text)
f.close()

html.close()

运行结果:
image-20230518135940498
暂时先分享这么多吧,希望大家在学习过程当中都能有所收获,感谢新课,如果想获取更多资料或者联系加群,可以关注我们新课的微信公众号,后台自动回复获取代码笔记资料。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值