使用requests.get爬取opencorporates.com无法获取目标HTML页面求助
解决opencorporates.com爬虫无法获取目标HTML的问题
你遇到的问题是因为该网站启用了Cloudflare反爬机制,普通requests.get请求无法通过JS验证环节,所以返回的是生成验证Cookie的脚本,而非目标页面内容。由于不能使用Selenium,推荐用cfscrape库自动处理Cloudflare的JS挑战,无需手动解析JS生成Cookie。
解决步骤:
- 安装
cfscrape库:
pip install cfscrape
- 修改代码,用
cfscrape替换requests发起请求:
import cfscrape from bs4 import BeautifulSoup company_name = "RI DUDDING LIMITED" # 创建scraper实例,自动处理Cloudflare验证 scraper = cfscrape.create_scraper() # 构造搜索URL search_url = "https://opencorporates.com/companies?q=" + company_name # 发起带验证的GET请求 response = scraper.get(search_url) # 解析HTML内容 soup = BeautifulSoup(response.content, 'html.parser') print(soup.prettify()) # 查找公司信息区块 company_section = soup.find('li', class_='search_result') if company_section: # 提取公司页面URL,补全完整路径 company_url = company_section.find('a')['href'] if not company_url.startswith('http'): company_url = f"https://opencorporates.com{company_url}" # 请求公司详情页 company_response = scraper.get(company_url) company_soup = BeautifulSoup(company_response.content, 'html.parser') # 提取目标信息 company_name = company_soup.find('h1', class_='company_name').text.strip() company_address = company_soup.find('span', itemprop='address').text.strip() company_status = company_soup.find('dd', class_='entity_status').text.strip() # 打印结果 print("Company Name:", company_name) print("Address:", company_address) print("Status:", company_status) else: print("Company not found.")
补充说明:
cfscrape会自动执行Cloudflare的验证JS,生成有效Cookie后再发起请求,能获取到和浏览器一致的HTML内容。- 如果遇到验证失败,可尝试更新
cfscrape库,或在创建scraper时添加自定义User-Agent模拟真实浏览器:
scraper = cfscrape.create_scraper(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'})
内容的提问来源于stack exchange,提问作者Anant Awasthi
相关产品推荐
相关产品推荐

