python爬虫学习第三十二天

今天的内容:穿越网页表单与登录窗口进行采集

到目前为止,我们示例中的网络爬虫在和大多数网站的服务器进行数据交互时,都是用HTTP 协议的 GET 方法去请求信息。这一章,我们将重点介绍 POST 方法,即把信息推送给 网络服务器进行存储和分析
页面表单基本上可以看成是一种用户提交 POST 请求的方式,且这种请求方式是服务器能够 理解和使用的。就像网站的 URL 链接可以帮助用户发送 GET 请求一样,HTML 表单可以 帮助用户发出 POST 请求。当然,我们也可以用一点儿代码来自己创建这些请求,然后通过 网络爬虫把它们提交给服务器

今天用到的模块和知识:
request库

Requests 库是一个擅长处理那些复杂的 HTTP 请 求、cookie、header(响应头和请求头)等内容的 Python 第三方库,之前的学习内容其实有涉及(十天左右的时候)

使用代码提交表单前最好去看一下网站的robots.txt文件,许多网站是不允许程爬虫提交表单的。

我所用的演示网页的表单源码如下:

<form method="post" action="processing.php"> 
First name: <input type="text" name="firstname"><br> 
Last name: <input type="text" name="lastname"><br> 
<input type="submit" value="Submit"> </form> 

特别注意firstname与lastname这两个字段。字段的名称决定了表单被确认后要被传送到服务器上的变量名称。如果你想模拟 表单提交数据的行为,你就需要保证你的变量名称与字段名称是一一对应的。

练习 简单post请求

import requests

params = {"firstname":"skasd","lastname":"ijsh"}
r = requests.post("http://pythonscraping.com/files/processing.php",data=params)
print(r.text)

作为表单提交者,我们不用过多关心表单的html语言,我们终端只放在两个地方:表单的字段以及表单的action属性,前者是你要提交的内容,后者是post请求的接受者

除了提交表单,爬虫也可以模拟上传文件,虽然不常用。
比如向下边这样的表单:

<form action="processing2.php" method="post" enctype="multipart/form-data"> 
Submit a jpg, png, or gif: <input type="file" name="image"><br> <input type="submit" value="Upload File"> 
</form> 

模拟提交这个表单只需要几行:

import requests
params = {"filename":open("test.txt")}
r = requests.post("http://pythonscraping.com/pages/processing2.php",files=params)
print(r.text)

练习 跟踪cookies

import requests

data = {"username":"egdxc","password":"password"}
r = requests.post("http://pythonscraping.com/pages/cookies/welcome.php",data = data)
print("cookies is:")
print(r.cookies.get_dict())
r1 = requests.get("http://pythonscraping.com/pages/cookies/welcome.php",cookies=r.cookies)
print(r1.text)

如果你面对的网站比较复杂,它经常暗自调整cookie,或者如果你从一开始就完全不想要用cookie,这时候Requests 库的 session 函数可以完美地解决这些问题

会话(session)对象(调用 requests.Session() 获取)会持续跟踪会话信 息,像 cookie、header,甚至包括运行 HTTP 协议的信息,比如 HTTPAdapter(为 HTTP 和 HTTPS 的链接会话提供统一接口)。

import requests


data = {"username":"egdxc","password":"password"}
session = requests.Session()
r = session.post("http://pythonscraping.com/pages/cookies/welcome.php",data = data)
print("cookies is :")
print(r.cookies.get_dict())
r = session.get("http://pythonscraping.com/pages/cookies/welcome.php")
print(r.text)

再第二次请求时我们没有传送cookies参数,因为session自动保存了最新的cookies

另外还有一种比较老式的认证行为:HTTP基本接入认证即在访问一个页面时先要求用户键入用户名和密码,常见与一些机密网站与API验证界面,requests库中同样有处理这些验证的库,这里便不再赘述

今天先到这里了,代码并没有多少,但是又回忆起了之前学过的requets库,感觉还是有些收获的,打卡~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值