使用 Python MechanicalSoup 登录时出现 503 错误
503 error logging in using Python MechanicalSoup
我想在登录页面后面抓取一些信息,但我得到了 503
这是我尝试使用 mechanicalsoup 登录时发生的情况(与 robobrowser 的结果相同):
>>> import mechanicalsoup
>>> browser = mechanicalsoup.StatefulBrowser(user_agent='Mozilla/5.0')
>>> page = browser.get('https://X.com')
>>> page.status_code
200
>>> page = browser.get('https://X.com/wp-login.php')
>>> page.status_code
503
我尝试了几种不同的 user_agents,我该如何解决这个问题?移动饼干?
它受 CloudFlare 保护,后者拒绝向 URL 发出纯 GET 请求。您需要一个非无头浏览器才能访问该页面,否则它将拒绝它。使用提供 GUI 的库,例如 Selenium,您应该没问题。
from selenium import webdriver
browser = webdriver.Firefox() # or whichever browser you prefer
browser.get('https://hacked.com/wp-login.php')
请注意,无法使用 Selenium 获取状态代码。但是,您可以通过更多方式与页面交互,并确认您已到达该页面。
好的,我设法使用 https://github.com/Anorov/cloudflare-scrape
做到了这一点
import cfscrape
from bs4 import BeautifulSoup
# log in
scraper = cfscrape.CloudflareScraper()
scraper.get('https://X.com/wp-login.php')
tokens = cfscrape.get_tokens('https://X.com')
browser = mechanicalsoup.StatefulBrowser(session=scraper, user_agent=tokens[1])
browser.select_form('#loginform')
browser['log'] = 'X'
browser['pwd'] = 'X'
browser.submit_selected()
browser.open('https://X.com/page/')
我想在登录页面后面抓取一些信息,但我得到了 503
这是我尝试使用 mechanicalsoup 登录时发生的情况(与 robobrowser 的结果相同):
>>> import mechanicalsoup
>>> browser = mechanicalsoup.StatefulBrowser(user_agent='Mozilla/5.0')
>>> page = browser.get('https://X.com')
>>> page.status_code
200
>>> page = browser.get('https://X.com/wp-login.php')
>>> page.status_code
503
我尝试了几种不同的 user_agents,我该如何解决这个问题?移动饼干?
它受 CloudFlare 保护,后者拒绝向 URL 发出纯 GET 请求。您需要一个非无头浏览器才能访问该页面,否则它将拒绝它。使用提供 GUI 的库,例如 Selenium,您应该没问题。
from selenium import webdriver
browser = webdriver.Firefox() # or whichever browser you prefer
browser.get('https://hacked.com/wp-login.php')
请注意,无法使用 Selenium 获取状态代码。但是,您可以通过更多方式与页面交互,并确认您已到达该页面。
好的,我设法使用 https://github.com/Anorov/cloudflare-scrape
做到了这一点import cfscrape
from bs4 import BeautifulSoup
# log in
scraper = cfscrape.CloudflareScraper()
scraper.get('https://X.com/wp-login.php')
tokens = cfscrape.get_tokens('https://X.com')
browser = mechanicalsoup.StatefulBrowser(session=scraper, user_agent=tokens[1])
browser.select_form('#loginform')
browser['log'] = 'X'
browser['pwd'] = 'X'
browser.submit_selected()
browser.open('https://X.com/page/')