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

Python版本信息爬取异常:返回值全为‘8’的问题求解

问题:爬取网页版本信息异常,所有行返回“8”

脚本功能与问题现状

  • 访问Excel文件中的URL
  • 提取网页上的版本信息
  • 将提取的版本与Excel记录的版本对比,生成新增latest version列的新文件:版本一致返回Same,否则返回提取到的版本
  • 异常:所有行的latest version列均返回“8”

现有函数代码

import requests
from bs4 import BeautifulSoup

def extract_version(url, current_version):
    # Make HTTP request to URL
    response = requests.get(url)
    # Parse HTML content of webpage
    soup = BeautifulSoup(response.content, 'html.parser')
    # Extract version information using regular expressions
    version_pattern = re.compile(r'\d+(?:\.\d+)*[a-zA-Z]*')
    match = version_pattern.search(str(soup))
    if match:
        extracted_version = match.group()
        if str(extracted_version) == str(current_version):
            return 'Same'
        else:
            return extracted_version
    else:
        return ''

Excel示例数据

modyolo.com/lords-mobile.html, 2.97 
apkmody.io/games/zombie-frontier-3-mod-apk, 2.52 
modyolo.com/car-mechanic-simulator-21.html, 2.1.63 
modyolo.com/roblox-2.html, 2.564.424c

已尝试的操作

  • 将正则中的\d替换为[0-9]
  • 将+替换为{1,}
  • 在正则开头添加^

解决方案

问题根源分析

  1. 缺失模块导入:代码中使用了re模块但未导入,会导致运行错误(实际运行的代码可能补了导入,但核心问题是正则匹配范围太广)
  2. 全局正则匹配无针对性:直接搜索整个网页的字符串,会匹配到网页中任意位置的孤立数字(比如“8”可能是页码、统计数等,并非目标版本)
  3. 未适配不同网站的版本位置:不同网站的版本信息存放在特定标签中,全局匹配无法精准定位

修正后的代码

import requests
from bs4 import BeautifulSoup
import re  # 补充缺失的模块导入

def extract_version(url, current_version):
    try:
        # 添加请求头,避免被网站识别为爬虫拦截
        headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"}
        response = requests.get(url, headers=headers)
        response.raise_for_status()  # 捕获HTTP请求错误
        soup = BeautifulSoup(response.content, 'html.parser')
        
        extracted_version = ""
        # 根据域名针对性定位版本元素
        if "modyolo.com" in url:
            # 匹配modyolo网站的版本标签(通常带version类的div)
            version_elem = soup.find("div", class_="version")
            if version_elem:
                extracted_version = version_elem.get_text(strip=True).replace("Version: ", "")
        elif "apkmody.io" in url:
            # 匹配apkmody网站的版本信息(info-box中的版本项)
            version_label = soup.find("span", string=re.compile("Version"))
            if version_label:
                extracted_version = version_label.find_next_sibling("span").get_text(strip=True)
        
        # 元素定位失败时,用正则兜底并筛选有效结果
        if not extracted_version:
            # 添加边界符\b,避免匹配数字片段;筛选排除单个数字(如"8")
            version_pattern = re.compile(r'\b\d+(?:\.\d+)*[a-zA-Z]*\b')
            matches = version_pattern.findall(str(soup))
            for match in matches:
                if len(match) > 1 or (len(match) == 1 and match in current_version):
                    extracted_version = match
                    break
        
        # 对比版本并返回结果
        if extracted_version:
            return 'Same' if str(extracted_version) == str(current_version) else extracted_version
        else:
            return ''
    except Exception as e:
        print(f"处理URL {url} 出错: {str(e)}")
        return ''

关键优化点

  • 添加请求头:模拟浏览器请求,避免被网站拦截
  • 分域名定位元素:针对不同网站的版本存放位置精准提取,比全局正则更可靠
  • 正则优化:添加边界符避免匹配数字片段,筛选排除无意义的单个数字
  • 异常处理:捕获请求错误、元素查找错误,避免脚本崩溃

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 11:22:28