0

我想在登录页面后面抓取一些信息,但我得到了 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,我该如何解决这个问题?移动饼干?

4

2 回答 2

5

好的,我设法使用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/')
于 2018-01-08T22:54:19.267 回答
1

它受到 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 获取状态代码。但是,您可以通过更多方式与页面交互,并确认您已到达该页面。

于 2018-01-08T18:42:41.763 回答