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

如何用BeautifulSoup从free-proxy-list.net分离提取IP与端口?

解决BeautifulSoup提取IP与端口分离的问题

嘿,我来帮你搞定这个问题!你现在只能拿到整行数据,是因为直接获取了<tr>的text属性,这会把该行所有<td>的内容拼接在一起。要拆分IP和端口,我们只需要定位到每行对应的<td>元素就行——目标网站的表格里,第一列是IP,第二列是端口,直接提取这两个<td>的文本就好。

方法一:遍历每行的<td>元素

修改你的循环部分,针对每个<tr>获取它下面的所有<td>,然后取前两个的文本:

def get_proxy(self):
    response = requests.get(self.url)
    soup = bs(response.content,'html.parser')
    data_list = [tr for tr in soup.select('tr') if tr.td]
    for tr in data_list:
        # 获取当前行的所有td标签
        tds = tr.find_all('td')
        # 确保有足够的td元素,避免索引越界
        if len(tds) >= 2:
            ip = tds[0].text.strip()  # 第一个td是IP
            port = tds[1].text.strip()  # 第二个td是端口
            print(f"IP: {ip}, 端口: {port}")

方法二:用CSS选择器直接定位目标列

如果你想更简洁,可以直接用CSS选择器定位所有IP列和端口列的<td>,再配对遍历:

def get_proxy(self):
    response = requests.get(self.url)
    soup = bs(response.content,'html.parser')
    # 定位所有第一列的td(IP)
    ip_tds = soup.select('tr td:nth-of-type(1)')
    # 定位所有第二列的td(端口)
    port_tds = soup.select('tr td:nth-of-type(2)')
    
    # 配对IP和端口
    for ip_td, port_td in zip(ip_tds, port_tds):
        ip = ip_td.text.strip()
        port = port_td.text.strip()
        print(f"IP: {ip}, 端口: {port}")

小提示

如果之后网站结构有变化,记得打开浏览器的开发者工具(F12)查看表格的HTML结构,确认IP和端口所在的<td>位置是否还是第1、第2列哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 12:02:47