requests模块基础
requests模块:python中原生的一款基于网络请求的模块,作用是模拟浏览器发送请求。
如何使用:
指定url - 发起请求 - 获取响应数据 - 持久化存储
实战需求:爬取搜狗首页的页面数据
import requests
if __name__ == "__main__":
# 指定url
url = 'https://www.sogou.com/'
# 发起请求,浏览器只会发起get请求,而requests即可发起get又能发起post,get请求会返回一个响应对象
response = requests.get(url = url)
# 获取响应数据,.text返回的是字符串形式的响应数据
page_text = response.text
print(page_text)
# 持久化存储
with open('./sogou.html','w',encoding='utf-8') as fp:
fp.write(page_text)
print('爬取数据结束!!!')
对于with open() as fp:的补充:
- 常见的读写操作
with open(r'filename.txt') as f:
data_user=pd.read_csv(f) #文件的读操作
with open('data.txt', 'w') as f:
f.write('hello world') #文件的写操作
- 相关参数
r: 以只读方式打开文件。
rb: 以二进制格式打开一个文件用于只读。
r+: 打开一个文件用于读写。
rb+:以二进制格式打开一个文件用于读写。
w: 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb: 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
w+: 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb+:以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a: 打开一个文件用于追加。如果该文件已存在,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab: 以二进制格式打开一个文件用于追加。如果该文件已存在,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+: 打开一个文件用于读写。如果该文件已存在,文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+:以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
- 与open()的区别
fp = open("./a.txt", "w+")
fp.write("This is a txt file.")
fp.close()
以上是标准的文件操作写流程,分别由"打开文件"--"写入文件内容"--"关闭文件"这三个步骤完成。
从系统资源分配层面来讲,系统在执行这个程序时,首先,在执行第一句时,系统需要为这个文件操作腾出一个空地(运行内存),一直供这个文件操作使用,直至执行"fp.close()"语句时,相应的内存空间才会被释放。那么,如果程序员忘记写close这条语句,就意味着没有关闭这个文件,此时就造成了系统资源的长期占用(造成了浪费)。
而对于with open() as fp:
with open("./a.txt", "w+") as fp:
fp.write("This is a txt file.")
print(fp.closed())
只需要前两步,即"打开文件"--"写入内容","关闭文件"这一步没有了。原因是,with...as...是根据代码块(隶属)关系进行工作的,当程序执行在代码块内时,文件会一直保持打开状态,一旦当程序离开这个代码块(即不隶属这个区间)时,程序就会自动的关闭这个文件,实现更好的文件管理,最优的使用系统资源。
通过最后的文件状态查看语句"fp.closed()"可以看到文件退出该区块时,已经自动关闭了该文件。