我的脚本中存在一些 Python 异常问题

我正在尝试从一些网站上抓取数据以进行概念验证项目。目前使用 Python3 和 BS4 来收集所需的数据。我有一本来自三个站点的 URLS 字典。每个站点都需要不同的方法来收集数据,因为它们的 HTML 不同。我一直在使用“Try, If, Else, stack 但我一直遇到问题,如果你能看看我的代码并帮助我修复它那就太好了!


当我添加更多要抓取的站点时,我将无法使用“Try、If、Else”循环通过各种方法来找到抓取数据的正确方法,我如何才能让这段代码面向未来添加未来有多少网站并从其中包含的各种元素中抓取数据?


# Scraping Script Here:


def job():


prices = {


    # LIVEPRICES


    "LIVEAUOZ":    {"url": "https://www.gold.co.uk/",

                           "trader": "Gold.co.uk",

                           "metal":  "Gold",

                           "type":   "LiveAUOz"},



    # GOLD


    "GLDAU_BRITANNIA":    {"url": "https://www.gold.co.uk/gold-coins/gold-britannia-coins/britannia-one-ounce-gold-coin-2020/",

                           "trader": "Gold.co.uk",

                           "metal":  "Gold",

                           "type":   "Britannia"},

    "GLDAU_PHILHARMONIC": {"url": "https://www.gold.co.uk/gold-coins/austrian-gold-philharmoinc-coins/austrian-gold-philharmonic-coin/",

                           "trader": "Gold.co.uk",

                           "metal":  "Gold",

                           "type":   "Philharmonic"},

    "GLDAU_MAPLE":        {"url":    "https://www.gold.co.uk/gold-coins/canadian-gold-maple-coins/canadian-gold-maple-coin/",

                           "trader": "Gold.co.uk",

                           "metal":  "Gold",

                           "type":   "Maple"},


    # SILVER


    "GLDAG_BRITANNIA":    {"url": "https://www.gold.co.uk/silver-coins/silver-britannia-coins/britannia-one-ounce-silver-coin-2020/",

                           "trader": "Gold.co.uk",

                           "metal":  "Silver",

                           "type":   "Britannia"},

    "GLDAG_PHILHARMONIC": {"url": "https://www.gold.co.uk/silver-coins/austrian-silver-philharmonic-coins/silver-philharmonic-2020/",

                           "trader": "Gold.co.uk",

                           "metal":  "Silver",

                           "type":   "Philharmonic"}


}

米琪卡哇伊
浏览 77回答 1
1回答

三国纷争

为抓取添加一个配置,其中每个配置都是这样的:prices = {    "LIVEAUOZ": {        "url": "https://www.gold.co.uk/",        "trader": "Gold.co.uk",        "metal": "Gold",        "type": "LiveAUOz",        "price": {            "selector": '#id > div > table > tr',            "parser": lambda x: float(re.sub(r"[^0-9\.]", "", x))        }    }}使用 price 的选择器部分获取 HTML 的相关部分,然后使用解析器函数对其进行解析。例如for key, config in prices.items():    response = requests.get(config['url'])    soup = BeautifulSoup(response.text, 'html.parser')    price_element = soup.find(config['price']['selector'])    if price_element:        AG_GRAM_SPOT = price_element.get_text()        # convert to float        AG_GRAM_SPOT = config['price']['parser'](AG_GRAM_SPOT)        # etc您可以根据需要修改配置对象,但对于大多数站点来说它可能非常相似。例如,文本解析很可能总是相同的,所以不用 lambda 函数,而是用 def 创建一个函数。def textParser(text):    return float(re.sub(r"[^0-9\.]", "", text))然后在配置中添加对 textParser 的引用。prices = {    "LIVEAUOZ": {        "url": "https://www.gold.co.uk/",        "trader": "Gold.co.uk",        "metal": "Gold",        "type": "LiveAUOz",        "price": {            "selector": '#id > div > table > tr',            "parser": textParser        }    }}这些步骤将允许您编写通用代码,保存所有那些尝试异常。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python