黑板客Python爬虫闯关 第一关 urllib简单通关

目录

题目

分析

代码

输出


题目

按指示将数字输入在末尾回车:

重复几次后,还是一样的界面,还老实告诉我这样的数字有几百个。

 

右键看一下网页源代码:



<!DOCTYPE html>
<html lang="zh-CN" >
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
    <meta name="baidu-site-verification" content="f2dwZkRE36" />
    <meta name="description" content="该博客用于记录网易云课堂中相关课程讲述的思路和一些扩展." />
    <meta name="keywords" content="blog, 博客, 黑板客, 爬虫闯关, 机器学习, django后端开发, 用python做些事." />
    <meta name="author" content="heibanke" />
    <head>
        <title>爬虫闯关——1</title>

        <link rel="stylesheet" href="/static/libs/bootstrap/css/bootstrap.min.css">
        <link href="/static/libs/jquery-ui-1.11.2/jquery-ui.min.css" rel="stylesheet" type="text/css"/>
 
        <!--[if lt IE 9]><script src="/static/libs/js/ie8-responsive-file-warning.js"></script><![endif]-->


        <!--[if lt IE 9]>
          <script src="/static/libs/js/html5shiv.js"></script>
          <script src="/static/libs/js/respond.min.js"></script>
        <![endif]-->
        <script src="/static/libs/jquery-ui-1.11.2/external/jquery/jquery.js"></script>
        <script src="/static/libs/bootstrap/js/bootstrap.min.js"></script>
        <script src="/static/libs/js/d3.min.js"></script>
        <script src="/static/libs/jquery-ui-1.11.2/jquery-ui.min.js"></script>
        
        <script>
            var _hmt = _hmt || [];
            (function() {
              var hm = document.createElement("script");
              hm.src = "//hm.baidu.com/hm.js?74e694103cf02b31b28db0a346da0b6b";
              var s = document.getElementsByTagName("script")[0]; 
              s.parentNode.insertBefore(hm, s);
            })();
        </script>
    
         
    </head>
    <body>
        <div class="container-fluid">
         
        <div class="row">
            <div class="col-sm-1 col-md-2 col-lg-3"></div>
            <div class="col-xs-12 col-sm-10 col-md-8 col-lg-6">
                
<h1>这里是黑板客爬虫闯关的第一关</h1>
<h3>下一个你需要输入的数字是43396. </h3>



                <div class="text-center">
<table class="table">
<thead>
<tr>
<td><a href="http://www.miitbeian.gov.cn" target="_blank" ><small>京ICP备14042321号</small></a></td>
<td><a href="http://www.heibanke.com/jizhang" target="_blank" ><small>云记账demo</small></a></td>
<td><a href="http://www.heibanke.com" target="_blank" ><small>黑板客blog</small></a></td>
<td><a href="http://study.163.com/course/courseMain.htm?courseId=1000035" target="_blank" ><small>用Python做些事</small></a></td>

</tr>
</thead>
</table>
</div>    
            </div>
            <div class="col-sm-1 col-md-2 col-lg-3"></div>
        </div>  
        </div>
    </body>
</html>

我们要看的重点在这里,数字是在h3标签中的:

<h1>这里是黑板客爬虫闯关的第一关</h1>
<h3>下一个你需要输入的数字是43396. </h3>

 

分析

我们要编写的程序需要做到这些事:

  1. 发起url请求并获得响应代码
  2. 找出响应代码中的数字
  3. 将数字拼接在原网址后面得到新网址
  4. 向新网址发起url请求并获得响应代码(递归)
  5. 返回2. 除非找不到数字了(关卡完成)

 

代码

我的urllib和re模块都是初学,代码不够优雅请见谅。

#coding:utf-8

import re
import urllib.request


url1="http://www.heibanke.com/lesson/crawler_ex00/"
# pattern是用来匹配包含5个数字的h3标签的正则表达式
pattern = re.compile(r"<h3>.*(\d){5}.*</h3>")
count=0

def get_url(url):
    # 每调用一次,计数加一
    global count
    count += 1

    # 1.用urlopen()访问url并获得网页代码
    response = urllib.request.urlopen(url,timeout=1000)
    text = response.read().decode('utf-8')    # text保存网页源代码
    s = re.search(pattern,text)    # s以Match对象的形式保存了h3标签的内容,s.group()可以读取匹配到的内容

    # 5.设置中断点,如s匹配不到会返回None对象
    if s==None:      
        print("finished")

    # 如果匹配成功,进行下一次调用
    else: 
        # 打印出当前次数和h3标签作为logging,脚本运行时能有一些反馈信息
        print(count,' ', s.group())
        # 2.读取h3标签中的数字
        pt = re.compile(r"(\d){5}")
        s2 = re.search(pt,s.group())
        # 3.拼接数字得到新url
        newUrl = "http://www.heibanke.com/lesson/crawler_ex00/" + s2.group() +"/"
        # 4.递归调用自身
        get_url(newUrl)

if __name__=='__main__':
    get_url(url1)

 

输出

其实只有50个嘛,并不老实。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Python爬虫教程urllib主要是介绍了Python爬虫技术中的urllib库的基础用法。该教程详细讲解了urllib库的各种功能和方法,包括发送请求、处理响应、设置请求头、处理异常等。这个教程对于想要学习和使用Python进行网络爬虫的人来说具有很大的参考价值。 同时,该教程也提到了一些常见的问题和解决方法,例如模拟超时的处理方法。在网络爬虫中,有时候我们长时间无法访问一个页面,可能是因为网速有限或者被发现我们是一个爬虫。针对这种情况,可以使用timeout参数来设置超时时间,如果超过了设定的时间仍无法获取响应,则会抛出URLError异常,我们可以在异常处理中对超时进行相应的处理。 总的来说,Python爬虫教程urllib是一个很好的学习资源,适合想要入门或深入学习Python爬虫技术的人使用。它提供了详细的教程和实例,可以让你快速上手和掌握使用urllib库进行网络爬虫的基本知识和技巧。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Python爬虫urllib基础用法教程](https://download.csdn.net/download/weixin_38656741/12858843)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Python爬虫 —— urllib库的使用(get/post请求+模拟超时/浏览器)](https://blog.csdn.net/qq_50587771/article/details/123840479)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [python爬虫urllib3的使用示例](https://download.csdn.net/download/weixin_38681147/12867742)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值