引入库:
import requests
给出需要爬取的地址:
url="https://www.baidu.com/"
获取响应:
response=requests.get(url)
data=response.text
print(data)
1.pos
- 账号登录
- 搜索内容
- 上传图片
- 上传文件
- 往服务器传数据 等
2.get
- 正常打开网页
- 不往服务器传数据
很多网页使用 get 就可以了,而 post, 我们则是给服务器发送个性化请求, 比如将你的账号密码传给服务器, 让它给你返回一个含有你个人信息的 HTML。
get使用方法如上,post使用如下:
首先我们调出浏览器的 inspect (右键点击 inspect, 中文是检查还是什么来着). 然后发现我们填入姓名的地方原来是在一个 <form> 里面。
这个 <form> 里面有一些 <input> 个 tag, 仔细看到 <input> 里面的关键信息,填好后, 为了记录点击 “submit” 后, 浏览器究竟发生了的变化, 在 inspect 窗口, 选择 Network, 勾选 Preserve log, 再点击 “submit”,就能看到服务器返回定制化后的页面时, 使用的方法和数据:
- Request URL (post 要用的 URL)
- Request Method (post)
- Form Data (post 去的信息)
Form data, 组织成一个 python 字典. 让后把这个字典传入 requests.post(), 注意, 这里的 post 里面的 url,是上面的Request URL。
data = {'firstname': '莫烦', 'lastname': '周'}
r = requests.post('http://pythonscraping.com/files/processing.php', data=data)
print(r.text)
3.上传图片
传照片也是 post 的一种,将本地的照片文件传送到服务器。
留意观察 url, 会发现, 传送完照片以后的 url 有变动。使用同样的步骤再次检查, 发现, “choose file” 按键链接的 <input> 是一个叫 uploadFile 的名字. 将这个名字记下, 放入 python 的字典当一个 “key”。
接着在字典中, 使用 open 打开一个图片文件, 当做要上传的文件. 把这个字典放入你的 post 里面的 files 参数. 就能上传你的图片了, 网页会返回一个页面, 将你的图片名显示在上面。
file = {'uploadFile': open('./image.png', 'rb')}
r = requests.post('http://pythonscraping.com/files/processing2.php', files=file)
print(r.text)
4.登录
登录账号, 浏览器做了什么:
- 使用 post 方法登录 url
- post 的时候, 使用了 Form data 中的用户名和密码
- 生成了一些 cookies
因为打开网页时, 每一个页面都是不连续的, 没有关联的, 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 是很麻烦的,使用Session, 在一次会话中, cookies 信息都是相连通的, 它自动帮我们传递这些 cookies 信息。
同样是执行上面的登录操作, 下面就是使用 session 的版本。
创建完一个 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!
网友评论