Glidedsky系列—爬虫基础


前言

第一第二题比较简单,也类似,就放在一起讲了


提示:题目网址:http://glidedsky.com/level/web/crawler-basic-2

一、题目描述

在这里插入图片描述

二、网页分析

在这里插入图片描述
我们需要的就是div属性下class="col-md-1"的文本内容,直接用bs4或者xpath就可以获取了,需要注意的是,访问题目需要登录状态,可以选择携带登录后的cookie信息,或者选择模拟登录。

2.模拟登录

打开网页调试工具,进行抓包分析后,我们可以看到,登录请求需要携带3个参数,分别为_token,email和password,其中token值是动态变化的:

在这里插入图片描述
我们需要获取的就是_token的值,我们查看栈跟踪,发现它是没有调用其他包的js的

在这里插入图片描述
也就是说_token大概率就藏在网页的源码中,我们进行查看源码,搜索关键词token可以发现登录页面源码中content的值很有可能就是我们需要的token,我们记录下content的值,再进行一次登录,查看_token的值进行比对,最终确定登录参数_token就是登录页面源码中csrf-token的content值。我们使用正则就能获取到,有了_token值我们也就可以实现模拟登录了
在这里插入图片描述
在这里插入图片描述


源码

import re
import time
import requests
from lxml import etree
start = time.time()
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:90.0) Gecko/20100101 Firefox/90.0',
}

#获取每页的数字和
def page_sum(url):
    res = s.get(url=url, headers=headers).text
    page_text = etree.HTML(res)
    items = page_text.xpath('//div[@class="col-md-1"]/text()')
    num = 0
    for i in items:
        num += int(i.replace('\n', '').strip())
    return num

#获取登录需要的参数_token
def get_token(url):
    resp = s.get(url)
    token = re.findall('<meta name="csrf-token" content="(.*?)">', resp.text)[0]
    return token

#模拟登陆
def login(s):
    login_url = "http://glidedsky.com/login"
    data = {
        '_token': get_token(login_url),
        'email': '账号',
        'password': "密码"
    }
    s.post(url=login_url, data=data)

#使用session保持登录状态
s = requests.Session()
login(s)
sum = 0
for i in range(1,1001):
    url = 'http://glidedsky.com/level/web/crawler-basic-2?page={}'.format(i)
    sum+= page_sum(url)
print(sum)
end = time.time()
print("爬虫耗时:{} s".format(end - start))

在这里插入图片描述

总耗时52s,我们后续可以通过多线程以及协程的方式提高爬取速度
爬虫基础多线程版
Glidedsky系列—爬虫基础协程版aiohttp

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值