网络爬虫基础之二(requests)

发布时间:2024-12-10 19:34

Python爬虫实战:requests库应用 #生活知识# #编程教程#

备注:此部分内容整理自莫烦python

从主动和被动的角度来说, post 中文是发送, 比较主动, 你控制了服务器返回的内容. 而 get 中文是取得, 是被动的, 你没有发送给服务器个性化的信息, 它不会根据你个性化的信息返回不一样的 HTML.

1.requests.get()功能

import requests

import webbrowser

param = {"wd": "莫烦Python"}

r = requests.get('http://www.baidu.com/s', params=param)

print(r.url)

webbrowser.open(r.url)

# http://www.baidu.com/s?wd=%E8%8E%AB%E7%83%A6Python

2.requests.post()功能

file = {'uploadFile': open('./image.png', 'rb')}

r = requests.post('http://pythonscraping.com/files/processing2.php', files=file)

print(r.text)

# The file image.png has been uploaded.

3.登录过程小结

使用 post 方法登录了第一个红框的 urlpost 的时候, 使用了 Form data 中的用户名和密码生成了一些 cookies

简单来说, 因为打开网页时, 每一个页面都是不连续的, 没有关联的, cookies 就是用来衔接一个页面和另一个页面的关系. 比如说当我登录以后, 浏览器为了保存我的登录信息, 将这些信息存放在了 cookie 中. 然后我访问第二个页面的时候, 保存的 cookie 被调用, 服务器知道我之前做了什么, 浏览了些什么. 像你在网上看到的广告, 为什么都可能是你感兴趣的商品? 你登录淘宝, 给你推荐的为什么都和你买过的类似? 都是 cookies 的功劳, 让服务器知道你的个性化需求.

4.获取cookies,并获取网页

所以大部分时候, 每次你登录, 你就会有一个 cookies, 里面会提到你已经是登录状态了. 所以 cookie 在这时候很重要. cookies 的传递也特别重要, 比如我用 requests.post + payload 的用户信息发给网页, 返回的 r 里面会有生成的 cookies 信息. 接着我请求去登录后的页面时, 使用 request.get, 并将之前的 cookies 传入到 get 请求. 这样就能已登录的名义访问 get 的页面了。

payload = {'username': 'Morvan', 'password': 'password'}

r = requests.post('http://pythonscraping.com/pages/cookies/welcome.php', data=payload)

print(r.cookies.get_dict())

# {'username': 'Morvan', 'loggedin': '1'}

r = requests.get('http://pythonscraping.com/pages/cookies/profile.php', cookies=r.cookies)

print(r.text)

# Hey Morvan! Looks like you're still logged into the site!

5.使用session登陆

不过每次都要传递 cookies 是很麻烦的, 好在 requests 有个很 handy 的功能, 那就是 Session. 在一次会话中, 我们的 cookies 信息都是相连通的, 它自动帮我们传递这些 cookies 信息. 这时我感叹, 程序员真会偷懒~ 哈哈

创建完一个 session 过后, 我们直接只用 session 来 post 和 get. 而且这次 get 的时候, 我们并没有传入 cookies. 但是实际上 session 内部就已经有了之前的 cookies 了.

session = requests.Session()

payload = {'username': 'Morvan', 'password': 'password'}

r = session.post('http://pythonscraping.com/pages/cookies/welcome.php', data=payload)

print(r.cookies.get_dict())

# {'username': 'Morvan', 'loggedin': '1'}

r = session.get("http://pythonscraping.com/pages/cookies/profile.php")

print(r.text)

# Hey Morvan! Looks like you're still logged into the site!

6.下载文件

6.1urlretrieve

IMAGE_URL = "https://morvanzhou.github.io/static/img/description/learning_step_flowchart.png"

from urllib.request import urlretrieveurlretrieve(IMAGE_URL, './img/image1.png')

6.2使用request

import requests

r = requests.get(IMAGE_URL)

with open('./img/image2.png', 'wb') as f:

f.write(r.content)

r = requests.get(IMAGE_URL, stream=True) # stream loading

with open('./img/image3.png', 'wb') as f:

for chunk in r.iter_content(chunk_size=32):

f.write(chunk)

网址:网络爬虫基础之二(requests) https://www.yuejiaxmz.com/news/view/436405

相关内容

python爬虫与数据分析之《向往的生活爬取》
python爬虫
小福利,如何根据爬虫获得的食物卡路里、自身基础热量和运动消耗量计算总的热量差
八爪鱼网络爬虫工具——学习笔记整理
我来学网络——哪些网络资源可以共享
python爬虫代码
爬虫解决验证码,用requests创建session会话对象
零基础小白如何自学黑客(网络安全)?
【网络安全】基础知识详解(非常详细)零基础入门到精通
安全基础网络建设方案

随便看看