You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何我的XPath解析器仅抓取表格中少量元素?

问题原因及解决办法

核心问题1:代码只检查了前10行

你的代码里parser.xpath('//tbody/tr')[:10]是先获取匹配行后截取前10行再筛选,相当于只在前10行里找符合条件的代理,而非从全表筛选后取10个,这是结果数量远少于手动统计的直接原因。

核心问题2:tbody标签可能不存在于原始HTML中

很多现代网站的<tbody>标签是浏览器渲染时自动添加的,服务器返回的原始HTML里并没有这个标签。用//tbody/tr查找,实际只能找到极少行,这也是导致总行数获取不足的关键。

修正后的代码

import requests
from lxml.html import fromstring

def get_proxies():
    url = 'https://free-proxy-list.net/'
    response = requests.get(url)
    parser = fromstring(response.text)
    proxies = set()
    # 直接定位目标表格的行,跳过表头行
    for row in parser.xpath('//table[@id="proxylisttable"]/tr[position()>1]'):
        # 精确匹配匿名类型和HTTPS支持状态
        is_elite = row.xpath('.//td[5]/text()')[0].strip() == 'elite proxy'
        supports_https = row.xpath('.//td[7]/text()')[0].strip() == 'yes'
        if is_elite and supports_https:
            ip = row.xpath('.//td[1]/text()')[0].strip()
            port = row.xpath('.//td[2]/text()')[0].strip()
            proxies.add(f"{ip}:{port}")
            # 收集够10个后停止遍历
            if len(proxies) >= 10:
                break
    return proxies

proxies = get_proxies()
print(proxies)

关键修改点

  • 用//table[@id="proxylisttable"]/tr[position()>1]定位表格行,跳过表头,避免依赖浏览器自动生成的tbody标签
  • 遍历全表筛选符合条件的条目,收集到10个后停止,而非先取前10行再筛选
  • 改用精确文本匹配代替contains,避免因文本空格或额外字符导致的误判

内容的提问来源于stack exchange,提问作者mak47

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 09:01:21