Python使用XPATH抓取anybusiness.com.au列表数据返回空如何解决
问题排查与解决方案
失效核心原因
- 缺失请求头伪装:目标站点会校验请求的
User-Agent字段,requests库默认发送的UA标识为python-requests/版本号,会被站点直接识别为爬虫请求,返回的内容并非正常的搜索结果页,因此xpath匹配不到对应内容。 - XPath路径稳定性差:你使用的是从html根节点开始的绝对路径,页面结构稍有变动就会导致匹配失效,更推荐使用带类名、属性特征的相对路径。
修正后可运行代码
import requests from lxml import html start_url = "https://www.anybusiness.com.au/search?page=1&sort=date-new-old" # 添加请求头伪装成普通浏览器访问 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" } res = requests.get(start_url, headers=headers) tree = html.fromstring(res.content) # 改用带业务属性特征的相对xpath,抗页面结构变动能力更强 title_xpath = "//div[contains(@class,'businessListingCard')]//h2/text()" title_value= tree.xpath(title_xpath) print(title_value)
后续注意事项
- 若后续抓取出现空结果,可先打印
res.status_code和res.text确认响应状态,若存在前端JS动态渲染数据的情况,需要改用selenium、playwright等动态渲染工具抓取,或者直接调用站点的异步数据接口。 - 频繁请求可能会触发站点的IP限流规则,可适当添加请求间隔时间,避免被限制访问。
内容的提问来源于stack exchange,提问作者James Dalton
相关产品推荐
相关产品推荐

