请求协助解决FAA N Number数据库爬取时requests.get()超时问题
问题:requests.get访问FAA N Number数据库页面超时
- 已成功按教程爬取示例网站(quotes.toscrape.com),但使用
requests.get()访问FAA N Number数据库查询页面时持续超时,即使设置了timeout=10参数 - 已定位问题出在该请求行,查阅过
requests.get()用法并调试,仍未解决 - 需求:解决超时问题,最终提取机型、制造商等数据
已尝试操作
- 确认Python环境可正常访问其他页面(如示例网站)
- 定位问题行是
requests.get()请求FAA数据库的代码 - 查阅
requests.get()官方文档及用法 - 调试过程中出现错误提示,最终仍回到超时状态
解决思路及代码示例
1. 添加请求头模拟浏览器访问
多数网站会拦截无浏览器标识的请求,添加User-Agent等请求头可绕过基础反爬:
from bs4 import BeautifulSoup import requests 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' } try: webpage = requests.get( 'https://registry.faa.gov/AircraftInquiry/Search/NNumberResult?nNumberTxt=7711M', headers=headers, timeout=30 # 政府网站响应通常较慢,适当延长超时时间 ) webpage.raise_for_status() # 主动触发请求错误,便于排查 soup = BeautifulSoup(webpage.text, "lxml") # 提取目标数据并去除多余空白字符 models = soup.find_all("td", attrs={"data-label":"Model"}) manufacturers = soup.find_all("td", attrs={"data-label":"Manufacturer Name"}) for model, manufacturer in zip(models, manufacturers): print(f"{model.get_text(strip=True)} - {manufacturer.get_text(strip=True)}") except requests.exceptions.RequestException as e: print(f"请求出错: {e}")
2. 使用会话保持连接
部分网站需要维持会话状态才能正常响应,requests.Session()可复用连接提升稳定性:
from bs4 import BeautifulSoup import requests session = requests.Session() session.headers.update({ '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' }) try: webpage = session.get( 'https://registry.faa.gov/AircraftInquiry/Search/NNumberResult?nNumberTxt=7711M', timeout=30 ) webpage.raise_for_status() soup = BeautifulSoup(webpage.text, "lxml") models = soup.find_all("td", attrs={"data-label":"Model"}) manufacturers = soup.find_all("td", attrs={"data-label":"Manufacturer Name"}) for model, manufacturer in zip(models, manufacturers): print(f"{model.get_text(strip=True)} - {manufacturer.get_text(strip=True)}") except requests.exceptions.RequestException as e: print(f"请求出错: {e}")
3. 排查网络或使用代理
如果是地区封锁、ISP限制等网络层面问题,可尝试使用代理:
# 示例:配置HTTP代理(需替换为可用代理地址) proxies = { 'http': 'http://your-proxy-address:port', 'https': 'https://your-proxy-address:port' } # 在请求中添加proxies参数 webpage = requests.get( 'https://registry.faa.gov/AircraftInquiry/Search/NNumberResult?nNumberTxt=7711M', headers=headers, proxies=proxies, timeout=30 )
4. 应对反爬策略
政府网站通常有严格反爬,需注意:
- 增加请求间隔(使用
time.sleep()),避免频繁请求 - 查看网站
robots.txt,确认目标路径是否允许爬虫访问 - 若IP被限制,可切换IP或使用代理池
内容的提问来源于stack exchange,提问作者Emily Stauf
相关产品推荐
相关产品推荐

