python模拟浏览器抓包_python:模拟浏览器输入验证码,登陆网页(抓包分析和网页爬取,以及http协议的一点理解)...

平时爬取网页,以及模拟12306抢票中,最重要的一点就是模拟浏览器输入验证码,登陆网页。

只有打开验证码这一关,才能进行下一步操作。 下面,我们先来讲一讲简单地模拟登陆,这次模拟登录的网站是英语课本随行课堂《视听说教程3》上的听力训练网址:外教社课程中心

工具如下:

IDE:pycharm python3.6

OS:window10

抓包分析

首先我们看一下 url get到的网页:

看见上面的登录按钮了吗? 这也就是登录的窗口,我们点击一下:

F12加F5刷新可以得到,我们点击之后,访问的真正的url,请求方式是get请求。

当我随便输入一个账号和密码,以及验证码时,浏览器会提交给服务器一个post请求,而我们输入的数据存储在表单之中,利用F12可以容易分析到:

我进行一个post请求,访问的真正的url是我画红线的部分,而我提交的数据呢? 我们继续往下面找:

看我所标志的区域,分别是我刚刚输入的账号,密码,以及一些验证信息。 这里的账号和密码均为明文,并未加密,所以很容易分析:我刚刚输入的账号和密码分别是:sghen/123456(这里的抓包分析之后,如果大家仔细想想,通过wifi是不是就可以很容易获取别人的账号和密码了呢。)

bs4爬取网页分析

而其中的“lt”是一个随机的网页验证码,后面的内容,通过之前的爬虫学习,我们应该很容易的得到:

如图,我所指的标签中,“value”属性所对应的值便是这个网页验证码,所以,代码如下:

url="https://sso.sflep.com/cas/login?service=https%3A%2F%2Fsso.sflep.com%2F"

header={"Referer":"https://sso.sflep.com/cas/login?service=https%3A%2F%2Fsso.sflep.com%2F",

"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36"

}

my_session=requests.session()

res1=my_session.get(url,headers=header)

print(res1.status_code)

soup=BeautifulSoup(res1.text,'lxml')

Tag=soup.find('input',attrs={"name":"lt"})["value"]

#到这里,我们就能得到,需要从网页中获得的信息了,下面就要模拟登录操作

http协议的一点理解:

在这里说一下session模块。session()的作用是建立一个会话,它能够自动的保存cookie值,在这里补充一点http协议的知识:http(或者https)请求网页是无状态的,也就是不会建立联系。比如,我用电脑访问了这个网页,然后第二次又同样的进行访问,服务器那边是不知道两次访问的人是不是都是我这台客户机的。 如果要建立联系,那么就需要cookie。 当客户机发出一个http请求的时候,服务器如果接收到了请求,那么它会返回一个set-cookie给客户机。同时,客户机将会把这个数据保存到自己请求头中,对应的键叫做:”cookie“。儿之和键对应的值就是cookie值,如果你进行下一次访问的时候,在请求头里面加上了这个cooike值,那么服务器一段将能够判断出你是上一次访问的客户机,所以就能够进行下一步的访问。

说到这里,我们就可以编写代码了:

datas={"username":"你的账号",

"password":"你的密码",

"lt":Tag,

"_eventId":"submit",

"submit":"登录"

}#构建一个data字典,也就是待会儿将要发送的post请求中发送的数据

res2=my_session.post(url,data=datas,headers=header)

res2.encoding=res2.apparent_encoding

text=res2.content

print(res2.headers)

print(res2.status_code)

with open(r"C:\Users\13016\Desktop\1.html",'w',encoding='utf-8') as f:

f.write(res2.text)#将获取的信息,保存为html文件,查看是否登录成功

值得注意的是:res2.encoding=res2.apparent_encoding这句十分的重要,因为大量网页为了使用户访问时的速度更快,一般都会对网页进行压缩传输,通常使用的压缩方式是:gzip

如果不对response进行转码的话,输出的内容很可能是乱码,所以这一句是很有必要的。

完整代码:

import requests

from bs4 import BeautifulSoup

url="https://sso.sflep.com/cas/login?service=https%3A%2F%2Fsso.sflep.com%2F"

header={"Referer":"https://sso.sflep.com/cas/login?service=https%3A%2F%2Fsso.sflep.com%2F",

"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36"

}

my_session=requests.session()

res1=my_session.get(url,headers=header)

print(res1.status_code)

soup=BeautifulSoup(res1.text,'lxml')

Tag=soup.find('input',attrs={"name":"lt"})["value"]

datas={"username":"17607100663",

"password":"zz1301646236",

"lt":Tag,

"_eventId":"submit",

"submit":"登录"

}

res2=my_session.post(url,data=datas,headers=header)

res2.encoding=res2.apparent_encoding

text=res2.content

print(res2.headers)

print(res2.status_code)

with open(r"C:\Users\13016\Desktop\1.html",'w',encoding='utf-8') as f:

f.write(res2.text)

我们来查看一下刚刚保存的html文件,是否模拟登录成功:

显然,已经登录成功! 下面就可以进一步抓包,完成更多操作了,不用多说,大家应该懂的,嘿嘿!

更多优质内容,请关注公众号:生物信息与python

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 您好,以下是爬取网页标题和文本,并保存到txt文件的Python代码示例: ```python import requests from bs4 import BeautifulSoup # 模拟浏览器登录 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} login_data = {'username': 'your_username', 'password': 'your_password'} # 发送登录请求 session = requests.Session() r = session.post('http://example.com/login', headers=headers, data=login_data) # 发送请求并解析返回的HTML url = 'http://example.com/page_to_crawl' r = session.get(url, headers=headers) soup = BeautifulSoup(r.text, 'html.parser') # 获取标题和文本 title = soup.title.string text = soup.get_text() # 保存到txt文件 with open('output.txt', 'w', encoding='utf-8') as f: f.write(title + '\n\n' + text) ``` 在上面的代码中,我们使用了`requests`库来发送HTTP请求,使用`BeautifulSoup`库来解析HTML。我们首先使用模拟登录的方法登录网站,然后发送请求并解析返回的HTML。最后,我们使用`title`和`get_text()`方法获取标题和文本,并将它们保存到txt文件中。 请注意,这仅是一个简单的示例,实际上还有许多其他因素需要考虑,例如处理网页中的图像,错误和异常,以及其他的细节。我希望这个示例能给您一 ### 回答2: import requests from bs4 import BeautifulSoup # 定义模拟浏览器的请求头部信息 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0;Win64) AppleWebkit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3" } # 模拟登录,获取登录后的Session对象 login_url = "http://example.com/login" # 替换为真实登录页面的URL session = requests.session() data = { "username": "your_username", # 替换为真实的用户名 "password": "your_password" # 替换为真实的密码 } session.post(login_url, headers=headers, data=data) # 爬取网页内容并保存到txt文件 target_url = "http://example.com/target_page" # 替换为真实目标页面的URL response = session.get(target_url, headers=headers) # 使用BeautifulSoup解析网页内容 soup = BeautifulSoup(response.text, "html.parser") # 获取网页标题 title = soup.title.string # 获取网页文本 text = soup.get_text() # 将标题和文本保存到txt文件 with open("result.txt", "w", encoding="utf-8") as file: file.write("标题:" + title + "\n\n") file.write("文本:" + text) print("爬取完成并保存到result.txt文件中") ### 回答3: 下面是一个用Python模拟浏览器登录,并爬取网页标题和文本的例子,代码如下: ```python import requests from bs4 import BeautifulSoup # 构造请求头,模拟浏览器的登录 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3', } # 登录目标网站,获取登录态的Cookie login_url = 'http://example.com/login' login_data = { 'username': 'your_username', 'password': 'your_password' } session = requests.Session() response = session.post(login_url, headers=headers, data=login_data) response.raise_for_status() # 爬取目标网页的标题和文本 target_url = 'http://example.com/target_page' response = session.get(target_url, headers=headers) response.raise_for_status() soup = BeautifulSoup(response.text, 'html.parser') title = soup.title.string text = soup.get_text() # 保存到txt文件 with open('output.txt', 'w', encoding='utf-8') as file: file.write(f'Title: {title}\n') file.write(f'Text: {text}') print('爬取并保存成功!') ``` 你需要将代码中的`'http://example.com/login'`和`'http://example.com/target_page'`替换为你要登录和爬取数据的实际网址。另外,需要填写你的用户名和密码。运行代码后,爬取的标题和文本将保存在名为`output.txt`的文本文件中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值