Beautiful Soup使用,登录知乎

本文介绍如何利用BeautifulSoup库进行网页数据抓取,并以知乎登录为例,展示如何解析网页内容、获取验证码并完成登录过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值