使用登录页面在 Python 中进行 Web 抓取
Web Scraping in Python with a Login Page
我正在使用此代码尝试进行一些网络抓取。我正在尝试使用 requests 和 beautiful soup 访问我的学校成绩,但我在登录时遇到了很多问题。我只是收到错误消息:
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)
感谢任何帮助!非常感谢!
在发布数据之前,您应该使用一些东西来呈现网页的 javascript。一个好的方法是将您的登录脚本与 Splash
:
结合使用 Scrapy
蜘蛛程序
您可以使用硒。我也用它从学校页面上获取我的成绩。
按下登录按钮后,网站会发送带有登录信息的 xhr 请求。以下应该有效,只需在提供的 space 中替换您的用户名和密码。
代码
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)
我正在使用此代码尝试进行一些网络抓取。我正在尝试使用 requests 和 beautiful soup 访问我的学校成绩,但我在登录时遇到了很多问题。我只是收到错误消息:
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)
感谢任何帮助!非常感谢!
在发布数据之前,您应该使用一些东西来呈现网页的 javascript。一个好的方法是将您的登录脚本与 Splash
:
Scrapy
蜘蛛程序
您可以使用硒。我也用它从学校页面上获取我的成绩。
按下登录按钮后,网站会发送带有登录信息的 xhr 请求。以下应该有效,只需在提供的 space 中替换您的用户名和密码。
代码
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)