使用Python登录后爬取alertasubastas.com网站的技术求助
解决登录alertasubastas.com后爬取内容的问题
看起来你在尝试用requests会话登录alertasubastas.com时遇到了阻碍,我来帮你梳理几个常见的问题点和改进方案:
1. 补全请求头,避免被反爬拦截
很多网站会校验请求头里的User-Agent(标识客户端类型),默认requests的UA太像爬虫,容易被拦截。你可以添加模拟浏览器的请求头:
import requests # 模拟Chrome浏览器的请求头 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36', 'Referer': 'https://alertasubastas.com/login' # 告诉服务器请求来自登录页,更符合真实行为 } payload = {'action': 'login', 'email': 'mail@gmail.com', 'password':'drowssap'} c = requests.session() # 带上headers发送POST请求 response = c.post('https://alertasubastas.com/login', data=payload, headers=headers)
2. 处理CSRF令牌(最常见的登录失败原因)
大多数现代网站都会用CSRF令牌防止跨站请求伪造,你直接提交账号密码很可能因为缺少令牌被拒绝。解决步骤是:
- 先GET登录页面,获取页面中的CSRF令牌
- 把令牌加入payload再提交登录请求
示例代码(需要先安装beautifulsoup4:pip install beautifulsoup4):
import requests from bs4 import BeautifulSoup headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36' } c = requests.session() # 先访问登录页,获取cookie和CSRF令牌 login_page = c.get('https://alertasubastas.com/login', headers=headers) soup = BeautifulSoup(login_page.text, 'html.parser') # 从页面中提取CSRF令牌(注意:这里的name属性值可能是_token、csrf_token等,需要根据实际页面调整) csrf_token = soup.find('input', {'name': '_token'})['value'] # 更新payload,加入令牌 payload = { 'action': 'login', 'email': 'mail@gmail.com', 'password':'drowssap', '_token': csrf_token } # 提交登录请求 response = c.post('https://alertasubastas.com/login', data=payload, headers=headers)
3. 验证登录是否成功
提交请求后,一定要检查响应状态和内容,判断登录是否成功:
# 打印响应状态码,200表示请求成功,但不代表登录成功 print("响应状态码:", response.status_code) # 打印响应文本,查看是否有登录成功的提示或跳转页面 print("响应内容:", response.text)
如果返回的还是登录页面,说明登录失败,可能是令牌名称不对、密码错误,或者还有其他隐藏参数需要提交(可以用浏览器F12的Network标签查看真实登录请求的Form Data)。
4. 极端情况:用浏览器模拟工具绕过反爬
如果网站有复杂的JS验证(比如动态生成参数、验证码),requests这类HTTP库很难模拟,这时候可以用selenium或playwright模拟真实浏览器操作:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 初始化Chrome浏览器(需要下载对应版本的chromedriver) driver = webdriver.Chrome() driver.get('https://alertasubastas.com/login') # 等待邮箱输入框加载完成,输入账号 email_input = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.NAME, 'email')) ) email_input.send_keys('mail@gmail.com') # 输入密码 password_input = driver.find_element(By.NAME, 'password') password_input.send_keys('drowssap') # 点击登录按钮(可以根据实际按钮的选择器调整,比如ID、XPath) login_button = driver.find_element(By.XPATH, '//button[@type="submit"]') login_button.click() # 登录成功后,就可以获取页面源码进行爬取了 page_source = driver.page_source # 后续爬取逻辑... # 关闭浏览器 driver.quit()
最后提醒:爬取前请务必查看网站的robots.txt和使用条款,确保你的爬取行为符合网站规定,避免法律风险。
内容的提问来源于stack exchange,提问作者Nabhan Abdulla
相关产品推荐
相关产品推荐

