python 爬虫 requests库 学习笔记(二)

本文探讨了爬虫在金融二级市场投资中的关键作用,特别是对于量化投资策略的数据收集、图表生成及信号分析。介绍了Python的requests库在发送GET、POST请求,处理响应,上传文件,设置Cookies,会话保持,代理设置,超时设置和身份认证等方面的应用。

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

爬虫对于金融二级市场投资来说是重要的工具,可以帮助我们高效的提取数据,方便我们之后进行量化投资需要的图表生成,历史回测,信号发出等等工作。 底层数据的价值决定了策略的价值,这是我认为的数据对于量化投资的重要性。我认为使用市面上可以免费获得的数据库中的数据,并不会使得基本面量化策略的效果得到改善。数据挖掘,爬取数据,高效的处理数据应该是基本面量化策略的最基础的工作,也是任务量最大的工作。因此爬虫则显得尤为重要。

python 爬虫 requests库

本人比较喜欢用这个库发送请求,因为相比urllib库,这个库的方法使用起来更加简单,功能也很强大。但是requests库需要自己安装。

1.发送请求

urllib库的urlopen()方法实际上是以GET的方式请求网页,所以在requests中的方法名就是get()。

import requests

r = requests.get("https://www.baidu.com/")
print(type(r))
# 状态码
print(r.status_code)
print(type(r.text))
print(r.text)
print(r.cookies)


# 也可以进行POST,PUT,DELETE等请求
r = requests.post("http://httpbin.org/post")
r = requests.put("http://httpbin.org/post")
r = requests.delete("http://httpbin.org/post")
r = requests.head("http://httpbin.org/post")
r = requests.options("http://httpbin.org/post")

发送get请求,get请求返回结果是JSON格式的话,我们可以将JSON格式的字符串转换为字典。如果请求的是普通的网页,则可以通过正则表达式或者其他方法获得我们想要的内容。

import  requests
data = {
	"name":"germey",
	"age":"22"
}
# 也可以加入headers参数
headers = {}
r = requests.get("http://httpbin.org/get", params=data, headers=headers)
print(r.text)
# 将JSON格式的字符串转换为字典
print(r.json())
print(type(r.json()))

发送get请求,也可以得到图片,音频,视频等文件,得到的都是二进制的文件。

import requests
r = requests.get("https://github.com/favicon.ico")
print(r.text)
print(r.content)
with open("favicon.ico", "wb") as f:
	f.write(r.content)

发送post请求。其中返回结果中的form部分的数据就是提交的数据。

import requests
data={"name":"germey", "age":"22"}
r = requests.post("https://httpbin.org/post", data=data)
print(r.text)

2.得到响应

我们可以通过content和text获得响应内容,也可以获得其他信息。

import requests
r = requests.get("http://www.baidu.com")
# 可以获得响应码,请求头,cookies,URL还有请求历史列表
print(r.status_code, r.headers, r.cookies, r.url, r.history)

3.文件上传

requests也可以提交一些数据,上传文件。

import requests
files = {"file": open("favicon.ico", "rb")}
r = requests.post("http://httpbin.org/post", files=files)
print(r.text)

4.设置cookies

之前用urllib来处理cookies比较繁琐,requests则比较简单。我们可以直接将cookies字符串转换为字典的格式,然后将转换之后的cookies作为参数传进去。

import requests

# 将网页的cookies复制粘贴过来
cookies_s = ""
cookies = {}
for line in cookies_s.split(';'):
	name, value = line.strip().split('=', 1)
	cookies[name] = value

headers={
	"Host":"",
	"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36"
}
r = requests.get(url="", headers=headers, cookies=cookies)

5.会话保持

如果第一个请求我们用post的方法登陆上了网站,之后我们想要获取登录后网站上面的信息,直接用get方法可行吗?实际上相当于我们打开了两个浏览器,所以我们在服务器那边的标记是不一样的,因此是无法得到我们想要的信息的。这时就需要保持通话,Session对象可以帮助我们维护一个通话,不用担心cookies的问题。

当然我们也可以采用另一种方法,就是在登陆之后的每一步get都把cookies作为一个参数传进去。这样也可以爬取需要登录的网页。

import requests
s = requests.Session()
s.get("http://httpbin.org/cookies/set/number/123456")
# 可以的得到上面访问设置的cookies
r = s.get("http://httpbin.org/cookies")

6.代理设置

有些网站,一旦你开始大规模爬取数据的时候,网站可能会弹出验证码或者跳转到登录界面,甚至直接封禁客户端的IP。为了防止这情况的出现,我们可以设置代理IP来解决这个问题。

import requests
proxies = {
	"http":"http://10.10.1.10:3118",
	"https":"http://10.10.1.10:1080"
}
requests.get("https://www.baidu.com", proxies=proxies)

7.超时设置

可以设置超时参数防止网络没有响应,避免等待太久的时间。直接在get方法里面再加一个timeout的参数就好了,传入的数字则是设置的超时时间。也可以将时间划分为连接和读取两个部分的时间,传入一个元组。

8.身份认证

带有登录界面的网站,需要输入用户名和密码。如果返回200的状态码,则表示认证成功。如果认证失败,则返回401状态码。

import requests
from requests.auth import HTTPBasicAuth

r = requests.get("http://localhost:5000", auth=HTTPBasicAuth("username", "password"))
# r = requests.get("http://localhost:5000", auth=("username", "password"))
print(r.status_code)

由于Python爬虫的库种类太多,所以我只列出了每个库较为常用的方法,之后会补充其他有用的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值