难题:尝试添加url列失败,因为该url最初用于提取内容

问题描述

我成功跟随this tutorial(使用python request-html进行解析/抓取)。但是,当我要调整代码添加包含url的列时,但是后来我意识到我将要使用的类(.question-hyperlink)已经用于解析问题本身。

您如何在此代码添加一个url列?

结果:

https://imgur.com/a/yPVC6GL

尝试:

def parse_tagged_page(html):
    question_summaries = html.find(".question-summary")
    key_names = ['question','Votes','tags','summary','url']
    classes_needed = ['.question-hyperlink','.Vote','.tags','.summary','.question-hyperlink' ]
    datas = []
    for q_el in question_summaries:
        question_data = {}
        for i,_class in enumerate(classes_needed):
            sub_el = q_el.find(_class,first=True)
            keyname = key_names[i]
            question_data[keyname] = clean_scraped_data(sub_el.text,keyname=keyname)
        datas.append(question_data)
    return datas

解决方法

URL包含在href元素的a属性中,将sub_el.text传递给函数clean_scraped_data()不会有帮助。您可能应该重构此功能:

def clean_scraped_data(el,keyname=None):
    if keyname == 'votes':
        return el.text.replace('\nvotes','')
    elif keyname == 'url':
        return f"https://stackoverflow.com{el.attrs['href']}"
    return el.text

应相应地调整函数调用:

clean_scraped_data(sub_el,keyname=keyname)