Python 爬虫闯关(第一关)

news/2024/7/19 11:16:23 标签: python, 爬虫, php

在学习爬虫时,遇到了一个有意思的网站,这个网站设置了几个关卡,需要经过爬虫进行闯关,随着关卡的网后,难度不断增加,在闯关的过程中需要学习不同的知识,你的爬虫水平也自然随之提高。

今天我们先来第一关,访问http://www.heibanke.com/lesson/crawler_ex00/:

第一关

按照提示,我们把数字放到地址栏的后面,再次进行访问:

再次访问

发现,还要再用新的数字放在地址栏进行访问,我们可以猜测了,第一关是将页面出现的数字填写到当前 url 的尾部进行访问,然后会得到一个新的数字,再用它替换 url 中的尾部数字,这样不断循环往复,直到页面出现成功标识:

中间环节页面

那么思路也有了:

  1. 解析页面中的数字;
  2. 将数字拼接成新的 URL;
  3. 访问新的 URL,重复第 1 步;
  4. 直至页面没有数字可以解析到!

逻辑比较简单,这里我们直接上代码了:

BeautifulSoup 实现

python"># coding=utf-8

import requests, bs4, re

url = 'http://www.heibanke.com/lesson/crawler_ex00/'

while True:
    # download the page
    print("forward to page %s ..." % url)
    response = requests.get(url)
    print("the return code : " + str(response.status_code))

    soup = bs4.BeautifulSoup(response.text, "html.parser")

    # 获取页面数字
    comic = soup.select('h3')
    print(comic[0].getText())
    number = re.findall("\d+", comic[0].getText())
    if number == []:
        print('The end.')
        break;
    else:
        url = 'http://www.heibanke.com/lesson/crawler_ex00/' + number[0] # 拼接新地址

程序运行结果

selenium 实现

python"># coding=utf-8

import requests, re
from selenium import webdriver

url = 'http://www.heibanke.com/lesson/crawler_ex00/'

browser = webdriver.Firefox()

while True:
    # download the page
    print("Forward to page %s ..." % url)
    browser.get(url)
    elem = browser.find_element_by_tag_name('h3')

    # get the url of the for the next page
    print(elem.text)
    number = re.findall("\d+", elem.text)
    if number == []:
        print('The end.')
        browser.quit()
        break;
    else:
        url = 'http://www.heibanke.com/lesson/crawler_ex00/' + number[0] # 拼接新地址

到这里我们才能看到最终成功的页面长这样:

最终页面

好了,第一关相对来说比较容易,下次我们来搞一下第二关,又兴趣的可以自己先上手攻取下了~


如果觉得有用,欢迎关注我的微信,一起学习,共同进步,不定期推出赠书活动~

你的关注是对我最大的鼓励!

最近搜集到慕课网视频,视频内容涵盖 Python、Java、PHP、前端、小程序、算法、架构、数据库等等!关注本公众号,后台回复「慕课网」即可获取下载地址。

转载于:https://www.cnblogs.com/hoxis/p/9706190.html


http://www.niftyadmin.cn/n/511925.html

相关文章

Unknown character set: ‘utf8mb4‘

今天使用Mysql数据库运行SQL文件时遇到了这个错误: Unknown character set: ‘utf8mb4’ 错误原因: 我的Mysql是5.0版本的,版本比较低,而这个sql文件是在5.7版本的数据库中转储的,但是 MySQL 原字符集为utf8,从5.5开…

019 python面相对象编程

一:self的意思 1.说明 self代表类的实例,而非类。 类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。 self 代表的是类的实例,代表当前对象的地址,而 self.__class__ 则…

has been blocked by CORS policy: No ‘Access-Control-Allow-Origin‘ header is present on the requested

Access to XMLHttpRequest at ‘http://localhost:8080/pics/lb’ from origin ‘http://127.0.0.1:8020’ has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource. 在进行跨域请求时通常会报上述的错误。 通过…

Linux环境下MySql的安装

提取码 3306 mysql5.6压缩包 (1)将该压缩包移动到/usr/local/目录下(在Linux系统中,软件一般安装到 /usr/local/目录下) mv mysql-5.6.33-linux-glibc2.5-x86_64.tar.gz /usr/local/(2)在usr/local目录下创建mysql文件…

python文档-基本API命令翻译及使用方法!

1、使用tkinter.Tk() 生成主窗口(windowtkinter.Tk()): window.title(标题名)     修改框体的名字,也可在创建时使用className参数来命名;window.resizable(0,0) 框体大小可调性,分别表示x,y方向的可变性&a…

开启MySQL远程访问权限

(1)登录mysql,在mysql程序中切换到mysql系统数据库: use mysql;(2)授权: grant all privileges on *.* to root % identified by 1234;赋予任何主机访问数据的权限,且设置远程连接…

Java中获取Class对象的四种方法

什么是Class对象 Class类位于java核心包lang包中,它是反射的源头。Class对象用于记录每个类的运行时数据结构,或者说是在内存中访问类的静态数据的接口,每个类都有一个唯一的Class对象。Class对象不能直接通过new来获取,因为其构造…

Java通过反射获取注解以及注解中的信息

首先自定义两个注解: 1、用于描述表名,只能用在类、接口、枚举上 Target(ElementType.TYPE) Retention(RetentionPolicy.RUNTIME) public interface TableName {String value(); }2、用于描述列的信息,列名、数据类型、长度 Target(Element…