我必须刮一个网站,这需要一个登录令牌。稍后将通过JS替换该值
document.getElementById('token').value='aa5fedc5decbba3318deab92ffdfbd55d9a2c09ec81a464351ea449dc726ddd5';
上面的代码出现在</html>
标记之后的源代码中。像这样:
</body>
</html>
<script>
document.getElementById('token').value='aa5fedc5decbba3318deab92ffdfbd55d9a2c09ec81a464351ea449dc726ddd5';
</script>
我必须复制这个值,并通过http请求将其发布到URL,以使请求被接受
但是我不能得到这个值。当我通过python请求库发送请求时,</html>
标记后的代码是不可见的
我的python代码如下:
import requests
from bs4 import BeautifulSoup
session_requests = requests.session()
html = session_requests.get("http://lms.uaf.edu.pk/login/index.php")
html = html.text
soup = BeautifulSoup(html, "lxml")
print(soup)
如何通过python获取登录令牌
我会使用一个直接的正则表达式,但是,值得一提的是,至少在我遇到的所有html解析器中,您可以通过包装在一组外部的
body
标记中来保存这些内容。不提倡这种方法,但在某些语言中,它对于获取头部的数据非常有用,否则在输入DOM文档的body.innerHTML时,这些数据会被剥离代码不起作用的原因是,BeautifulSoup跳过了
</html>
之后的任何html代码(这基本上关闭了文档),因此它只解析<html>
标记内的所有内容,而作为替换登录标记的JavaScript的<script>
标记出现在关闭</html>
标记之后,它不会被BeautifulSoup解析,因此您无法获取它。在浏览器中(我在FireFox上进行了测试),关闭</html>
标记后的所有内容都被移动到文档体中,这就是为什么在浏览器中查看站点时登录标记会正确显示的原因。为此,您应该将BeautifulSoup放在一边,只需使用普通Python(可读版本):以下代码成功从您的网站获取登录令牌:
相关问题 更多 >
编程相关推荐