如何爬取ACS出版物网站并规避HTTP 403错误?
解决ACS网站爬取403 Forbidden问题的方案
针对你用requests爬取ACS网站遇到的403问题,即使更换User-Agent仍无法解决,以下是几个实用的解决思路,适合你每日数次的小规模爬取场景:
1. 补充完整的请求头字段
仅设置User-Agent不足以模拟真实浏览器请求,网站的反爬机制会检查更多请求头字段。建议补充以下常见字段:
import requests headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", "Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3", "Accept-Encoding": "gzip, deflate, br", "Connection": "keep-alive", "Upgrade-Insecure-Requests": "1" } session = requests.Session() response = session.get("https://pubs.acs.org", headers=headers) print(response.status_code)
使用requests.Session()可以自动维持会话Cookie,更贴近浏览器的访问模式。
2. 用浏览器自动化工具模拟真实访问
如果请求头补充后仍无效,建议使用Selenium或Playwright这类浏览器自动化工具,它们会真实启动浏览器执行请求,几乎完全模拟人的操作,绕过大多数基础反爬:
Selenium示例代码
from selenium import webdriver from selenium.webdriver.chrome.options import Options import time options = Options() options.add_argument("--headless=new") # 无头模式,不显示浏览器窗口 options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36") driver = webdriver.Chrome(options=options) try: driver.get("https://pubs.acs.org") time.sleep(2) # 模拟页面加载等待 page_source = driver.page_source print("页面获取成功") finally: driver.quit()
3. 控制爬取频率
即使是小规模爬取,也需要控制请求间隔,避免短时间内多次请求触发反爬。可以在每次请求后添加time.sleep(3-5)的延迟,模拟人的操作节奏。
重要提醒
虽然你是小规模爬取,但该网站的robots.txt明确禁止自动爬虫,建议先查看ACS是否提供官方API或合法的数据获取渠道,避免违反网站的使用条款或相关法律规定。
内容的提问来源于stack exchange,提问作者Overwatchgamer
相关产品推荐
相关产品推荐

