Python爬虫之模拟CSDN网站登录

Python爬虫之模拟CSDN网站登录

模拟网站登录的思路

在我们模拟网站登录之前,我们需要分析网站登入需要哪些数据。我们可以通过抓包工具,研究网站登录,以及登录访问的头信息变化。

1.打开csdn的登录页面

image

2.输入用户名和密码登录,使用fiddler抓包。(我们只是为了知道上传的数据结构,不需要输入正确的用户名和密码)。如下所示:

image

3.检查网页源代码,分析上传的post的数据

通过上面的抓包分析,我们知道post上传form表单数据的具体参数。

表单参数:

username=aaaaa&password=vvvvvv&lt=LT-518075-B1UABMXz7mIEo25UFRgOtqg5iJKFhM&execution=e1s2&_eventId=submit

我们发现,除了我们需要输入的用户名和密码外,还有其他的参数,那么其他参数表示什么呢?我们可以通过登入页面的源代码。如:

image

实际上lt参数,execution参数,_eventId参数都是在页面内写死的,其中_eventId参数是不变的。所以我们需要先抓取登录的页面,获取页面的ltexecution参数。在从通过form表单post数据,完成Python登录。具体代码实现,请看代码示例。

代码示例:
import requests
from bs4 import BeautifulSoup


def get_headers():
    return {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36'
    }


def write_html(text, filename):
    """
    将返回的响应信息写入文件
    :param text: 响应页面内容
    :param filename:   保存的文件名
    :return:
    """
    with open(filename, 'w', encoding='utf-8') as f:
        f.write(text)


if __name__ == '__main__':
    # csdn登入的url
    login_url = "https://passport.csdn.net/account/login"
    # 通过requests的session请求
    seesion = requests.session()
    # 通过get请求登录页面的url,获取响应数据
    response = seesion.get(login_url, headers=get_headers())
    # 输出响应码
    print(response.status_code)
    # 将返回的html写入文件
    write_html(response.text, 'get_login.html')

    # 使用BeautifulSoup解析html,使用lxml的方式解析
    soup = BeautifulSoup(response.text, 'lxml')
    # 获取登入页面的input标签中lt的值,后面post表单上传登入信息需要
    lt = soup.select('input[name="lt"]')[0]['value']
    # 获取登入页面的input标签中execution的值,后面post表单上传登入信息需要
    execution = soup.select('input[name="execution"]')[0]['value']
    # 上传表单的data数据
    data = {
        "username": "your-username",
        "password": "your-password",
        "lt": lt,
        "execution": execution,
        "_eventId": "submit"
    }

    # 打印data数据
    print(data)

    # post请求上传data数据,模拟登入,获取响应结果
    response = seesion.post(login_url, data=data, headers=get_headers())
    # 打印响应的状态码
    print(response.status_code)
    # 将响应的信息写入文件
    write_html(response.text, 'login_success.html')

    # 通过get请求,请求个人主页,如果没有登入成功,则会返回登页,登入成功,则会获取到登入的个人信息
    response = seesion.get('https://my.csdn.net/my/mycsdn', headers=get_headers())
    # 打印响应码
    print(response.status_code)
    # 将响应结果保存文件
    write_html(response.text,'my.html')

最后,在my.html文件中,能获取登录的用户信息。因为我的页面跟多是使用js加载的,只能获取少量的数据。

  • 6
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值