Beautiful Soup简介
Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。
Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。你不需要考虑编码方式,除非文档没有指定一个编码方式,这时,Beautiful Soup就不能自动识别编码方式了。然后,你仅仅需要说明一下原始编码方式就可以了。
Beautiful Soup已成为和lxml、html6lib一样出色的python解释器,为用户灵活地提供不同的解析策略或强劲的速度
2. Beautiful Soup 安装
Beautiful Soup 3 目前已经停止开发,推荐在现在的项目中使用Beautiful Soup 4,不过它已经被移植到BS4了,也就是说导入时我们需要 import bs4 。所以这里我们用的版本是 Beautiful Soup 4.3.2 (简称BS4),另外据说 BS4 对 Python3 的支持不够好,不过我用的是 Python3.4,如果有小伙伴用的是 Python3 版本,可以考虑下载 BS3 版本。
from bs4 import BeautifulSoup
from urllib import request
import requests
import time
#https://www.zhihu.com/captcha.gif?r=1510111455319&type=login&lang=cn
def captcha(captcha_data):
#将2进制数据写入到文件中
with open('captcha.jpg','wb')as f:
f.write(captcha_data)
text=input('请输入验证码')
return text
def zhihuLogin():
#构建一个session可以保存cookie
sess=requests.Session()
headers={'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:56.0)'}
#首先获取登录页面,找到需要post的数据,同时记录cookie的值
html=sess.get('https://www.zhihu.com/#signin',headers=headers).text
#调用xml解析库
bs=BeautifulSoup(html,'lxml')
#_xsrf作用是跨站请求伪造(或者叫跨域攻击)
_xsrf=bs.find('input',attrs={'name':'_xsrf'}).get('value')
print(_xsrf)
url='https://www.zhihu.com/captcha.gif?r=1510111455319&type=login&lang=cn'
captcha_url='https://www.zhihu.com/captcha.gif?r=%d&type=login'%(time.time()*1000)
print(captcha_url)
#发送图请求,获取图片数据流。
captchadata=sess.get(captcha_url,headers=headers).content
text=captcha(captchadata)
data={
'_xsrf':_xsrf,
'phone_num':'1866****',
'password':'dcde7****',
'captcha':text
}
response=sess.post('https://www.zhihu.com/login/phone_num',data=data,headers=headers)
print(response.text)
if __name__=='__main__':
zhihuLogin()