zoukankan      html  css  js  c++  java
  • 爬虫闯关

    这两天刚学了一点python爬虫, 然后在知乎上面看到了这个小游戏 爬虫闯关。


    第一关

    就是读取给的网页的字里面的数字, 然后把这个数字加到url里面, 变成一个新的网址, 不断循环。 读取数字用正则搞一下就好, 然后写一个递归函数就可以了, 很简单。
    ``` import requests from bs4 import BeautifulSoup import re baseurl = 'http://www.heibanke.com/lesson/crawler_ex00/' def cal(url): wb_data = requests.get(url) soup = BeautifulSoup(wb_data.text, 'lxml') title = soup.select('body > div.container-fluid > div > div.col-xs-12.col-sm-10.col-md-8.col-lg-6 > h3') str = re.compile(r'[0-9]+') l = re.findall(str, title[0].text) if l: num = l[0] url = baseurl + num print(url) cal(url)

    cal(baseurl)

    <br><br>
    <h2><a href = "http://www.heibanke.com/lesson/crawler_ex01/" target = "_blank">第二关 </a></h2>
    <br>
    给你一个用户名和密码, 用户名随便写, 密码是1-30的数字, 让你猜出来是几。
    
    这个也没有什么难度, post的时候加一个data, 然后循环随便搞一下就可以了..
    

    from bs4 import BeautifulSoup
    import requests

    url = 'http://www.heibanke.com/lesson/crawler_ex01/'
    for i in range(1, 31):
    data = {
    'username': 1,
    'password': i,
    }
    wb_data = requests.post(url, data = data)
    soup = BeautifulSoup(wb_data.text, 'lxml')
    title = soup.select('body > div > div > div.col-xs-12.col-sm-10.col-md-8.col-lg-6 > h3')[0]
    print(title.get_text(), i)

    
    <br><br>
    <h2><a href = "http://www.heibanke.com/lesson/crawler_ex02/" target = "_blank">第三关 </a></h2>
    <br>
    
    这个比上一个难, 用上一个的方法的话得到403, 根本进不去..
    这个题多一个csrf, 但是这个东西是什么我到现在也是不知道的..
    用一个header保存一下cookie和user-agent, 然后用一个data保存username, password, 以及csrf的值。
    csrf的值可以通过chrome很容易的找出来。
    f12打开监控, 然后到network那一栏, 然后输入用户名和随便一个密码, 然后点登陆, 就可以看到crawer_ex02/这样一个东西, 点开在最下面就有csrf的值。
    然后和上一题就一样了, post的时候多加一个header就可以
    

    from bs4 import BeautifulSoup
    import requests

    url = 'http://www.heibanke.com/lesson/crawler_ex02/'
    for i in range(1, 31):
    data = {
    'username': 1,
    'password': i,
    'csrfmiddlewaretoken': '7N0jcVSUQRd5ezEfF95fhYbI1rADeO7m'
    }
    header = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36',
    'Cookie': 'sessionid=o6ydafn1f151urac1d7lbdiw6bjg566q; csrftoken=7N0jcVSUQRd5ezEfF95fhYbI1rADeO7m; Hm_lvt_74e694103cf02b31b28db0a346da0b6b=1461495011; Hm_lpvt_74e694103cf02b31b28db0a346da0b6b=1461495140'
    }
    wb_data = requests.post(url, data = data, headers = header)
    soup = BeautifulSoup(wb_data.text, 'lxml')
    title = soup.select('body > div > div > div.col-xs-12.col-sm-10.col-md-8.col-lg-6 > h3')[0]
    print(title.get_text(), i)

    
    剩下的我还不会=.=
  • 相关阅读:
    Delphi使用Indy、ICS组件读取网页
    用SendNotifyMessage代替PostMessage避免消息丢失
    LuaPlus的编译和引用
    如何转换和输出超大整数(64位)
    jQuery 源码:封装 Event
    jQuery 源码:操作样式
    jQuery 源码:元素位置
    模拟ES5 Array.prototype.reduce
    as 和 is 运算符以及安全的类型强制转换
    计算机编程基础
  • 原文地址:https://www.cnblogs.com/yohaha/p/5428161.html
Copyright © 2011-2022 走看看