python - 使用登录页面在 Python 中进行 Web 抓取
问题描述
我正在使用此代码尝试进行一些网络抓取。我正在尝试使用请求和漂亮的汤来访问我的学校成绩,但我在登录时遇到了很多麻烦。我只是收到错误消息:
TypeError: 'NoneType' object has no attribute '__getitem__'
这是我正在使用的代码:
import requests
from bs4 import BeautifulSoup
headers = {
'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
}
login_data = {
'name': 'my_username',
'pass': 'my_password',
'form_id': 'new_login_form',
'op': 'Login'
}
with requests.Session() as s:
url = 'https://irc.d125.org'
r = s.get(url, headers=headers)
soup = BeautifulSoup(r.content, 'html5lib')
login_data['form_build_id'] = soup.find('input', attrs={'name': 'form_build_id'})['value']
r = s.post(url, data=login_data, headers=headers)
print(r.content)
任何帮助表示赞赏!非常感谢!
解决方案
当登录按钮被按下时,站点会发送一个带有登录信息的 xhr 请求。以下应该可以工作,只需在提供的空间中替换您的用户名和密码。
代码
import requests
from bs4 import BeautifulSoup
headers = {
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
}
login_data = {
"UserName": "REPLACE_USER", # Enter Username
"Password": "REPLACE_PASSWORD", # Enter password
"RememberMe": False,
}
with requests.Session() as s:
url = 'https://irc.d125.org/Login'
s.get(url, headers=headers)
r = s.post(url, data=login_data)
print(r.text)
推荐阅读
- c++ - Node * head 在结构之外做什么?
- c# - 当我需要索引位置周围的项目时,如何防止“索引超出范围”?
- c# - 带有值的嵌套 For-each 循环序列问题
- django - 单元测试使用从抽象模型类派生的模型的管理命令,其中创建模型仅用于测试目的
- apache-spark - 具有相同 groupId 的多个 Spark Kafka 消费者
- swift - 固定在 UINavigationBar 下方时,UISearchBar 未居中
- php - 数据库输入失败
- android-studio - Android Studio kvm权限被拒绝
- jenkins - 詹金斯在工作后删除目录
- wordpress - 创建表查询返回插件在激活时生成了 X 个字符的意外输出