使用BeautifulSoup/Selenium爬取必应词典示例句异常问题求助
必应词典爬取问题解决方案
一、requests+BeautifulSoup爬取不到示例句的原因
必应词典的示例句内容是动态加载的:直接通过requests.get请求搜索URL时,服务器返回的只是页面的初始HTML结构,示例句这类内容是页面加载完成后,通过前端发起AJAX请求从后端接口获取的,所以你拿到的response.content里不会包含这些数据。
解决方法:直接调用后端API接口
可以通过浏览器开发者工具的「网络」面板,找到页面加载时获取示例句的AJAX接口,直接用requests请求该接口并解析JSON数据。针对avengers的搜索示例代码如下:
import requests url = "https://cn.bing.com/dict/api/search" params = { "q": "avengers", "mkt": "zh-cn", "setlang": "zh-cn" } 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://cn.bing.com/dict/" } response = requests.get(url, params=params, headers=headers) data = response.json() # 提取英文示例句 for item in data.get('sen_li', []): print(item.get('sen_en', '').strip())
二、Selenium直接访问搜索URL无结果的解决方法
必应词典的反爬机制会拦截直接带参数的搜索请求,而从主页手动搜索则能正常返回结果。需要模拟真实用户的操作流程:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys import time driver = webdriver.Chrome() # 先打开必应词典主页 driver.get("https://cn.bing.com/dict") # 找到搜索框并输入关键词 search_box = driver.find_element(By.ID, "sb_form_q") search_box.send_keys("avengers") # 按回车触发搜索 search_box.send_keys(Keys.ENTER) # 等待页面加载完成 time.sleep(2) # 提取英文示例句 examples = driver.find_elements(By.CLASS_NAME, "sen_en") for example in examples: print(example.text.strip()) driver.quit()
内容的提问来源于stack exchange,提问作者JJJohn
相关产品推荐
相关产品推荐

