glidedsky爬虫基础第二关通关详解

@glidedsky爬虫基础第二关通关涉及知识点

  • 模拟登录
  • 正则提取
  • for循环嵌套
  • xpath提取
  • 数值累加

简介:glidedsky是一个爬虫专用的练习网站,上面有很多关卡,通过第一关可以看到第二关,通过第二关可以看见所有关卡,写爬虫就像玩游戏一样。
在这里插入图片描述
下面我们开始本次的内容:
首先我们要先导入本次需要使用的模块requests、re和xpath。

import requests
import re
from lxml import etree

然后基本的UA伪装要加上

header = {
    'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36"
}

接下来开始模拟登录,首先使用requests的session函数,保持请求过程中一直是同一个会话连接,然后开启请求登录页面。

s = requests.session()
url = 'http://www.glidedsky.com/login'
login_text = s.get(url,headers=header).text

拿到网页源码后通过re正则表达式提取出token,注意:这里的token每次请求网页都会变化,所以这也是为什么要保持同一个会话连接的原因。

token = re.findall('<input type="hidden" name="_token" value="(.*?)">',login_text)
print(token) #验证是否正确提取到token

然后开始构建post请求表单,第一行就是刚刚获取带的token,第二行是你的账户名,第三行代表你的账号密码。

data = {
    '_token': token,
    'email': '这里放你的登录账号',
    'password': '这里放你的登录密码',
}

然后开始发送post请求,携带参数请求登录网站。

login_url = 'http://www.glidedsky.com/login'
get_login = s.post(url=login_url,headers=header,data=data).text

接下来定义一个变量保存计算后的值,然后写循环嵌套部分,先写一个外循环,以为网页有1000页,同时网页没有0页,所以range(1,1001),并赋值给x,下面放上翻页链接,用format函数代入,print输出查看是否正确。

result = 0
for x in range(1,1001):
    all_url = 'http://www.glidedsky.com/level/web/crawler-basic-2?page={}'.format(x)
    print(all_url)

因为现在是在循环内部,所以请求的时候会每一个url都请求一次,我们在将请求到的网页源码转换成xpath解析,因为解析出来的是多个整数,所以需要用到循环将每个提取出来的内容都循环一次,再用strip()去掉左右空格个,并赋值给num,然后开始计算结果,因为num是字符串,所以需要用int将其转换成整数才能相加,最后打印输出结果,将结果填入答题框内,即可通关。

    get_text = s.get(all_url,headers=header).text
    html = etree.HTML(get_text)
    for number in html.xpath('//div[@class="row"]/div/text()'):
        num = number.strip()
        result += int(num)
print(result)

下面是完整代码:

import requests
import re
from lxml import etree
header = {
    'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36"
}
s = requests.session()
url = 'http://www.glidedsky.com/login'
login_text = s.get(url,headers=header).text
token = re.findall('<input type="hidden" name="_token" value="(.*?)">',login_text)
print(token)
data = {
    '_token': token,
    'email': '这里放你的登录账号',
    'password': '这里放你的登录密码',
}
login_url = 'http://www.glidedsky.com/login'
get_login = s.post(url=login_url,headers=header,data=data).text
result = 0
for x in range(1,1001):
    all_url = 'http://www.glidedsky.com/level/web/crawler-basic-2?page={}'.format(x)
    print(all_url)
    get_text = s.get(all_url,headers=header).text
    html = etree.HTML(get_text)
    for number in html.xpath('//div[@class="row"]/div/text()'):
        num = number.strip()
        result += int(num)
print(result)

感谢阅读,我们下次再会!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lemuzhi_零度

作者幸苦,犒劳一下

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值