sleeping with 同学寄来的围巾...

搂着同学寄来的围巾睡觉,别样的滋味,真舒服,好久没有如此深沉的睡眠了
你遇到的错误是 `403 Forbidden`,这意味着服务器拒绝响应你的请求。这通常是因为服务器检测到你的请求行为异常(如爬虫行为),并进行了拦截。 在这种情况下,仅仅设置 `User-Agent` 是不够的,因为目标网站可能使用了更复杂的反爬虫机制,例如: - **IP 封锁** - **JavaScript 渲染内容** - **Cookie 或 Session 验证** - **请求头验证(Accept、Referer 等)** - **验证码(CAPTCHA)** --- ## ✅ 解决方案:使用 Selenium 模拟浏览器访问 为了绕过这些反爬机制,我们可以使用 `Selenium` 模拟真实浏览器行为,加载完整的网页内容。这样可以绕过大部分基于请求头和 IP 的检测。 --- ### ✅ 所需安装包 ```bash pip install selenium beautifulsoup4 ``` 同时,你需要下载与你浏览器版本匹配的 WebDriver,例如: - Chrome 浏览器:[ChromeDriver](https://sites.google.com/chromium.org/driver/) - Firefox 浏览器:[GeckoDriver](https://github.com/mozilla/geckodriver) --- ### ✅ 使用 Selenium 的完整代码如下: ```python from selenium import webdriver from selenium.webdriver.chrome.service import Service from bs4 import BeautifulSoup import time import random # 随机延迟函数 def random_delay(min_delay=1, max_delay=3): delay = random.uniform(min_delay, max_delay) print(f"Sleeping for {delay:.2f} seconds...") time.sleep(delay) # 初始化浏览器驱动(以 Chrome 为例) def init_browser(): options = webdriver.ChromeOptions() options.add_argument('--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36') options.add_argument('--disable-blink-features=AutomationControlled') # 隐藏自动化特征 options.add_argument('--disable-gpu') options.add_argument('--no-sandbox') options.add_argument('--disable-dev-shm-usage') # 使用本地 WebDriver 路径 service = Service(executable_path='/path/to/chromedriver') # 替换为你的 chromedriver 路径 driver = webdriver.Chrome(service=service, options=options) return driver # 抓取页面内容 def fetch_page_with_selenium(url, driver): driver.get(url) time.sleep(5) # 等待 JavaScript 加载 return driver.page_source # 解析页面内容 def parse_page(html): soup = BeautifulSoup(html, 'html.parser') results = [] for item in soup.find_all('div', class_='cmp-search-results__result'): title_div = item.find('h3', class_='cmp-search-results__result__title') title = title_div.get_text(strip=True) if title_div else 'No title' link = title_div.find('a')['href'] if title_div and title_div.find('a') else '#' description_p = item.find('p', class_='cmp-search-results__result__description') description = description_p.get_text(strip=True) if description_p else 'No description' date_p = item.find('p', class_='cmp-search-results__result__date') date = date_p.get_text(strip=True).replace('Publication date :', '').strip() if date_p else 'No date' results.append({ 'title': title, 'link': 'https://www.fatf-gafi.org' + link, 'description': description, 'date': date }) return results # 主函数 def main(): url = 'https://www.fatf-gafi.org/en/search-page.html' driver = init_browser() try: html = fetch_page_with_selenium(url, driver) data = parse_page(html) for item in data: print(f"Title: {item['title']}") print(f"Link: {item['link']}") print(f"Description: {item['description']}") print(f"Date: {item['date']}") print('-' * 80) random_delay() finally: driver.quit() if __name__ == '__main__': main() ``` --- ### ✅ 代码说明 | 功能 | 描述 | |------|------| | `init_browser()` | 初始化 Selenium 浏览器,模拟用户行为 | | `fetch_page_with_selenium()` | 使用 Selenium 打开网页并获取完整 HTML | | `parse_page()` | 使用 BeautifulSoup 解析 HTML 内容 | | `random_delay()` | 随机延迟,防止请求频率过高 | | `--disable-blink-features=AutomationControlled` | 隐藏自动化特征,防止被识别为爬虫 | --- ### ✅ 增加的反爬机制 | 反爬机制 | 实现方式 | |----------|----------| | 模拟浏览器行为 | 使用 Selenium | | 隐藏自动化特征 | 添加 `--disable-blink-features=AutomationControlled` | | 设置 User-Agent | 在浏览器启动参数中设置 | | 随机延迟 | 控制请求频率 | --- ### ✅ 注意事项 1. **ChromeDriver 路径**:请将代码中的 `/path/to/chromedriver` 替换为你本地的 `chromedriver` 路径。 2. **浏览器版本匹配**:确保你的浏览器和 WebDriver 版本一致。 3. **等待时间**:根据页面加载速度,适当调整 `time.sleep(5)`。 4. **异常处理**:建议增加 `try-except` 处理浏览器异常。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值