• 爬虫闯关


    这两天刚学了一点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)

    
    剩下的我还不会=.=
  • 相关阅读:
    为什么java使用对象序列化到文件,打开之后是乱码,而且更换编码格式查看也不能正常显示呢
    String类能够导入IDEA,但是里面的构造方法无法使用,一直显示报错
    IDEA不能提示导入java.io.File类,但是自己手写import没问题,最后找到了问题所在
    扑克牌发牌,排序的功能实现
    TFS 生成定义
    Git-tfs工具
    日期和时间
    调用惯例
    优化查找和排序
    使用更好的库
  • 原文地址:https://www.cnblogs.com/yohaha/p/5428161.html
Copyright © 2020-2023  润新知