Python 爬虫闯关(第四关)-续

上回 Python 爬虫闯关(第四关) 中,我们发现程序执行过程非常漫长,将近 24 分钟啊!另外页面也有提示说:网页会慢半拍。那么也许需要一个高效率的方法进行解析,多线程?

题意再理解

本关的题目内容,这里再简单说一下:不清楚的翻下历史。

页面给出了闯关所需密码的随机位置,以及该位置的值,我们需要遍历所有页面,获取到 100 位的密码。

其中,值得注意的两点:

  1. 每一页的载入速度非常慢(正如页面内容所述),大约需要 15 秒,这是黑板课后台故意设置的;
  2. 每个页面是动态加载的,每次获取到的密码的位置并不是相同的,也就是检索完 13 页数据也不能得到 100 位的密码,需要重复检索以得到其余位置的密码。

由此可见,必须使用多线程才能迅速得到密码。

闯关思路

多线程编程使用 threading 模块,登录过程和第 3 关一样,基本只需要在第 3 关的基本上增加获取密码的功能就可以了。

  1. 初始化一个字典,用来存放密码;
  2. 每个线程都不断获取页面的全部位置和值,并将它们更新到字典中;
  3. 判断字典长度,如果字典的长度小于 100,则继续抓取页面数据并跟新字典,直到长度满足 100;
  4. 将字典中的数据转换为字符串,然后通过 post 提交到服务器进行登录;

实现

# coding=utf-8

import requests, bs4
import threading
import time

def login():
    # 登录URL,获取cookie
    login_url = 'http://www.heibanke.com/accounts/login/?next=/lesson/crawler_ex03/'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值