已通过IP登录授权目标网站 执行爬虫时无法识别IP问题求助
问题原因
- 你当前直接使用
requests.get()发送无状态请求,没有携带浏览器正常访问时生成的会话Cookie、请求头等信息,站点的反爬机制仅识别符合浏览器特征的同IP请求,因此会拦截你的爬虫请求 - 你之前用Selenium未生效,大概率是没有复用本地已完成验证的浏览器用户配置,新开的无痕/默认Selenium浏览器实例没有对应会话状态
解决方案
方案1:调整requests请求逻辑(推荐,性能更高)
- 使用
requests.Session()维持全局会话,先请求首页完成会话初始化,再发起后续请求 - 补充和浏览器一致的请求头,至少包含
User-Agent、Referer字段,可通过浏览器F12开发者工具的「网络」面板复制正常请求的头信息
修改后的代码示例:
import requests from bs4 import BeautifulSoup # 初始化会话 session = requests.Session() # 替换为你自己浏览器的User-Agent headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36", "Referer": "https://www.china-data-online.com/" } session.headers.update(headers) # 先请求首页完成会话校验 session.get("https://www.china-data-online.com/") # 后续请求都用session发起 base_url = "https://www.china-data-online.com/member/hynbefore2003/" response = session.get(base_url) soup = BeautifulSoup(response.text, 'html.parser') raw_industry_link = soup.findAll('a', class_="bluelink") for i in raw_industry_link: if i.attrs['href'][-4] in '0123456789': # 筛选带有4位数字代码的页面 new_url = base_url + 'hyntshowjj.asp?hy=' + i.attrs['href'][-4:] + '&code=A01' r = session.post(new_url, {'ayear':1999}) soup = BeautifulSoup(r.text, 'html.parser') # 后续解析逻辑
方案2:修复Selenium逻辑
如果要继续用Selenium,启动时配置加载本地Chrome用户配置,即可复用手动访问时的授权状态,示例配置(以Chrome为例):
from selenium import webdriver from selenium.webdriver.chrome.options import Options chrome_options = Options() # 替换为你本地Chrome用户配置的路径,Windows下一般是C:\\Users\\你的用户名\\AppData\\Local\\Google\\Chrome\\User Data chrome_options.add_argument("user-data-dir=C:\\Users\\xxx\\AppData\\Local\\Google\\Chrome\\User Data") # 指定使用默认的Profile chrome_options.add_argument("profile-directory=Default") driver = webdriver.Chrome(options=chrome_options) # 先访问首页 driver.get("https://www.china-data-online.com/") # 再访问目标页 driver.get("https://www.china-data-online.com/member/hynbefore2003/hyntshowjj.asp?hy=0610&code=A01")
内容的提问来源于stack exchange,提问作者yanswu
相关产品推荐
相关产品推荐

