主要介绍Python Requests Library,它能处理更加复杂的HTTP requests, cookies, headers等等。
只需四行代码就可以完成一个简单的表单提交,下面是最为简单的表单:
页面地址:http:// pythonscraping.com/pages/files/form.html这里稍微涉及到一些简单的前端编程。
import requests
params = {'firstname': 'Luo', 'lastname': 'Xun'}
r = requests.post("http://pythonscraping.com/files
processing.php", data=params)
print(r.text)
执行结果:Hello there,Luo Xun!
显然,正常的网页不是几个text域和几个submit提交按钮构成,它还包括单选、多选按钮等等,在HTLML5中,加入了日期dates属性和email等。不管属性域多么复杂,我们只需注意属性名和对应的value值就行,属性名通过检查源码很容易确定,属性值有时候需要仔细辨认,最简单的方法是看URL,比如:http://domainname.com?thing1=foo&thing2=bar 我们立刻知道name和value:{‘thing1’:’foo’,’thing2’:’bar’}两个。另外一种方法是通过浏览器的开发工具查看,Google的chrome浏览器点击View → Developer → Developer Tools.
同上一章节,略。
大部分网站都会存储你的个人登陆信息在你的浏览器的cookies里,服务器可以利用Cookies包含信息的任意性来筛选并经常性维护这些信息,以判断在HTTP传输中的状态。Cookies最典型的应用是判定注册用户是否已经登录网站,用户可能会得到提示,是否在下一次进入此网站时保留用户信息以便简化登录手续,这些都是Cookies的功用。另一个重要应用场合是“购物车”之类处理。用户可能会在一段时间内在同一家网站的不同页面中选择不同的商品,这些信息都会写入Cookies,以便在最后付款时提取信息。虽然方便了web开发人员,这对网络爬虫可不是什么好事,你可以一直提交登陆认证,但是如果你不追踪cookies返回的信息,很可能下次你访问的页面再也没有你的登陆信息了。保持追踪cookies返回信息的代码很简单:
import requests
params = {'username': 'Ryan', 'password': 'password'}
r = requests.post("http://pythonscraping.com/pages/cookies/ welcome.php", params) print("Cookie is set to:")
print(r.cookies.get_dict())
print("-----------")
print("Going to profile page...")
r = requests.get("http://pythonscraping.com/pages/cookies/ profile.php",cookies=r.cookies)
print(r.text)
但是会遇到这种情况,某网站会不断的修改cookies而不会有任何反馈信息给你,我们的解决办法是使用session:
import requests
session = requests.Session()
params = {'username': 'username', 'password': 'password'}
s = session.post("http://pythonscraping.com/pages/cookies/ welcome.php", params) print("Cookie is set to:")
print(s.cookies.get_dict())
print("-----------")
print("Going to profile page...")
s = session.get("http://pythonscraping.com/pages/cookies/ profile.php")
print(s.text)
这里建议使用session而不是直接requests。
在cookies出现之前,最常用的处理logins的方式是HTTP basic access authentication 在现在依然可以看到它的身影,尤其在一些安全性很高的网站。登陆认证时传入的用户名username可以是任何名字,但密码password必须是”password”。
import requests
from requests.auth import AuthBase
from requests.auth import HTTPBasicAuth
auth = HTTPBasicAuth('ryan', 'password')
r = requests.post(url="http://pythonscraping.com/pages/auth/ login.php", auth=auth)
print(r.text)
现在的网站还有一些其他的安全特性,主要是防止恶意程序自己创建账户登录网站进行一些非法操作,后续章节将会讲到。