GlidedSky爬虫-基础1

题目描述

在这里插入图片描述
题目链接:http://glidedsky.com/level/crawler-basic-1

题目分析

  第一个题目相对来说比较简单,可能就是模拟登录的时候需要稍微分析一下,下面就大致的分析一下登录过程。
  首先打开登录界面:http://glidedsky.com/login,因为网站用的是提交form表单的形式进行登录,所以首先查看网页的源代码,找出需要提交的字段。网页的form表单的源代码如下所示(省略了一些无关紧要的内容)。

<form method="POST" action="http://glidedsky.com/login">
    <input type="hidden" name="_token" value="8pxypa3GEXwJbPlS2TTn2hHjUEOBt1lSNZyk6TsN">
    <div class="form-group row">
        <label for="email" class="col-md-4 col-form-label text-md-right">E-Mail Address</label>

        <div class="col-md-6">
            <input id="email" type="email" class="form-control" name="email" value="" required autofocus>
        </div>
    </div>
    <div class="form-group row">
        <label for="password" class="col-md-4 col-form-label text-md-right">Password</label>

        <div class="col-md-6">
            <input id="password" type="password" class="form-control" name="password" required>

        </div>
    </div>
    <div class="form-group row mb-0">
        <div class="col-md-8 offset-md-4">
            <button type="submit" class="btn btn-primary">
                Login
            </button>
        </div>
    </div>
</form>

  从上面的代码中可以看出,form表单提交的地址为:http://glidedsky.com/login,也就是登录界面的地址,需要提交的字段有三个,分别是_tokenemailpasswordemail指的是邮箱地址,password指的是登录密码,而_token是每次请求登录页面时,服务器动态生成的,因此我们的模拟登录策略是,在向http://glidedsky.com/login提交表单数据之前,先请求一次此页面,并从返回的html代码中提取出_token的值,之后再构造登录表单需要的三个字段,最后携带着表单数据向登录验证地址发起POST请求即可。
  当登录成功之后,再向数据页面发起GET请求就可以得到数据页的源代码,之后剩下的工作就是解析页面,提取数字。此网站的目的是练习反爬虫的方法,而不是练习页面的解析,因此网页结构比较简单,本文也就不再赘述网页的解析过程。

源代码

import requests
import re
from bs4 import BeautifulSoup
params = {
    'email': '',  # 你的账号
    'password': '',  # 你的密码
    '_token': 's9OikhiHKa8CoplaD7g8sxXx6XnsCc5HRGj24znl',

}


def login():
    url = 'http://glidedsky.com/login'
    session = requests.Session()
    r = session.get(url)
    html = r.text
    result = re.search('input type="hidden" name="_token" value="(.*?)"', html)
    _token = result.group(1)
    params['_token'] = _token
    session.post(url=url, data=params)
    return session


def crawler():
    session = login()
    r = session.get('http://glidedsky.com/level/web/crawler-basic-1')
    soup = BeautifulSoup(r.text, 'lxml')
    numbers = soup.find_all('div', class_='col-md-1')
    ans = 0
    for number in numbers:
        ans += int(number.string.strip())
    print(ans)


if __name__ == '__main__':
    crawler()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值