爬虫闯关 - 第二关

这是第二关的实现.

题目描述:

这里写图片描述

如图,要求就是找出对应的密码

分析:

随便输入,然后用开发者工具查看,有一条post的请求:

这里写图片描述

点进去:

这里写图片描述

可以看到 表单数据(Form Data)包含了cookie和用户名,密码,点击 view source,得到编码的字符串(虽然此post请求包含cookies,但服务器实际上用不着,只是cookies机制的问题)

csrfmiddlewaretoken=QkxgqDeP31SuohDsx63vU0zZP7fIIcCv&username=1&password=1

知道了原理,就明白,我们要用urllib模块,在urlopen里添加data参数,这样就会以post方法请求url.接着用这则抓取返回的html中密码错误 字样,如果抓取失败,那说明当前页面就是验证成功的页面.

实现:

import urllib.parse
import urllib.request
import re

data={'username':'hailong'}
url='http://www.heibanke.com/lesson/crawler_ex01/'
for num in range(1,31):
        data['password']=num
        post_data=urllib.parse.urlencode(data).encode('utf-8')
        print(post_data)
        response=urllib.request.urlopen(url,post_data)
        html=response.read().decode('utf-8')
        result=re.findall('密码错误',html)
        if not result:
                print(html)
                break
<think>好的,用户正在寻找头歌平台上于urllib爬虫第二内容或教程。首先,我需要回顾一下用户提供的引用内容,看看是否有相线索。引用[3]提到了第三的任务是使用Opener方法完成爬取程序,而第一是requests基础。用户已经完成了第一和第三,所以第二可能位于它们之间。 接下来,我需要分析可能的课程结构。通常,urllib的学习路径可能从基础到高级逐步深入。第一可能涉及基本的urlopen使用,第二可能涉及处理请求头、POST请求或表单提交,第三则涉及更复杂的Opener和Cookie处理。 根据引用[3]中的代码,第二可能涉及添加请求头信息,比如设置User-Agent或处理反爬机制。此外,引用[4]提到urlopen的基本用法,而第二可能在此基础上扩展,比如添加headers参数或处理POST请求的数据参数。 用户可能需要了解如何构造请求对象,使用Request类来添加headers,或者处理需要登录的页面。例如,引用[3]中的代码使用了HTTPCookieProcessor,但第二可能在第三之前,因此可能更基础,比如手动添加headers而不是使用Cookie处理器。 另外,考虑到爬虫教程的常见步骤,第二可能涉及发送带有自定义headers的GET请求,或者处理简单的POST请求。用户可能需要修改代码,添加headers字典,并使用Request对象来发送请求,而不是直接使用urlopen(url)。 还需要检查是否有其他引用提到第二的内容,但现有的引用[1]、[2]、[3]、[4]中,只有引用[3]明确提到了第三的任务,而其他引用涉及urlopen的基本使用和爬虫启动。因此,可能需要推断第二的内容基于urllib的进阶用法,介于基础urlopen和Opener之间。 总结一下,可能的第二内容是如何使用urllib的Request类来添加请求头,处理更复杂的请求,或者处理表单提交。用户可能需要参考头歌平台的具体课程结构,但根据常见的学习路径,这些内容可能是第二的重点。</think>根据头歌平台的课程结构,于urllib爬虫第二内容可能涉及**请求头设置与POST请求处理**。以下是推测的任务要点及参考实现: --- ### 推测的urllib爬虫第二任务目标 1. **使用`urllib.request.Request`类构建完整请求** 2. **添加自定义请求头(如User-Agent)绕过基础反爬机制** 3. **处理POST请求(如表单提交)** --- ### 参考实现代码模板 ```python import urllib.request import urllib.parse def send_request(url, headers=None, data=None): ''' :param url: 目标URL :param headers: 请求头字典(如{'User-Agent': 'Mozilla/5.0'}) :param data: POST请求的表单数据(字典格式) :return: 响应内容 ''' # 处理POST数据 if data: data = urllib.parse.urlencode(data).encode('utf-8') # 创建Request对象并添加headers request = urllib.request.Request(url, data=data) if headers: for key, value in headers.items(): request.add_header(key, value) # 发送请求 response = urllib.request.urlopen(request) return response.read().decode('utf-8') ``` --- ### 键知识点解析 1. **Request对象构建** - 使用`urllib.request.Request(url, data, headers)`替代直接`urlopen(url)` - 支持GET/POST请求切换:当`data`参数存在时自动转为POST请求[^4] 2. **请求头设置** - 必须添加`User-Agent`伪装浏览器访问: ```python headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'} ``` 3. **POST数据处理** - 使用`urllib.parse.urlencode()`将字典转为URL编码字符串 - 需要显式调用`.encode('utf-8')`转换为字节流[^1] ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值