提取联系人和传真号的Python爬虫代码逻辑正确但无法运行
排查方案
请求头未模拟浏览器环境:usaopps.com可能会校验请求头合法性,默认requests的请求头特征明显,服务器返回的是无有效数据的页面。把浏览器的完整请求头(比如User-Agent、Accept-Language)复制过来再发起请求:
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', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Accept-Language': 'en-US,en;q=0.9' } resp = requests.get(target_url, headers=headers)动态内容未被渲染:如果联系人和传真号是通过JavaScript动态加载的,requests只能获取静态HTML源码,BeautifulSoup无法解析动态生成的元素。这种情况需要用Selenium、Playwright这类工具先渲染页面再解析:
from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By driver = webdriver.Chrome() driver.get(target_detail_url) # 等待联系人元素加载完成 contact_elem = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CLASS_NAME, 'contact-person')) ) fax_elem = driver.find_element(By.CLASS_NAME, 'fax-number') print(f"Contact Person: {contact_elem.text}") print(f"Fax Number: {fax_elem.text}") driver.quit()元素选择器与实际DOM不匹配:网站可能更新过页面结构,你用的class、id或XPath路径已经失效。把
resp.text保存为本地HTML文件,用浏览器开发者工具重新定位元素,修正选择器。比如原来用find('div', class_='old-contact-class'),现在要改成新的类名或标签结构。未进入企业详情页:如果联系人和传真号只存在于企业详情页,而你的代码只在搜索结果列表页查找,自然会返回None。确认遍历逻辑是否正确跳转到每个企业的详情页URL,再在详情页内提取数据。
反爬机制拦截:检查请求的状态码,如果不是200,说明请求被拦截。可以尝试降低请求频率(添加
time.sleep(2)),或者使用代理IP。另外,部分页面可能需要Cookie验证,可先手动登录网站,把Cookie复制到请求头中。
内容的提问来源于stack exchange,提问作者Life Unexplained
相关产品推荐
相关产品推荐

