在Python中用BeautifulSoup向列表添加值

2024-10-02 02:37:23 发布

您现在位置:Python中文网/ 问答频道 /正文

allname = []
alltel = []
allemail = []

for link in docdetail:
            name = soup.h1.contents[1]
            tel = soup.find('a', class_='tel').string
            email = soup.find('a', class_='email').string
            allname.append(name)
            alltel.append(tel)
            allemail.append(email)

我想在每个for循环后将name附加到allname,tel附加到alltel,email附加到allemail。但是name/tel/email的返回值可能是空的,那么属性的顺序可能会混乱。 如果返回的值为空,我想给变量赋值“NA”。我应该如何精确地编写代码?在


Tags: nameinforstringemaillinkfindclass
3条回答

您可以编写自己的函数来验证属性,请参见下面的示例。在

def validate_string(attr):
    if attr.strip() == '':
        return 'NA'
    else:
        return attr.strip()

allname = []
alltel = []
allemail = []

for link in docdetail:
    name = soup.h1.contents[1]
    tel = soup.find('a', class_='tel').string
    email = soup.find('a', class_='email').string
    allname.append(validate_string(name))
    alltel.append(validate_string(tel))
    allemail.append(validate_string(email))

您可以使用try, except来捕捉异常,如下所示。在

allname = []
alltel = []
allemail = []

for link in docdetail:
        name = soup.h1.contents[1]
        tel = soup.find('a', class_='tel').string
        email = soup.find('a', class_='email').string
        allname.append(name)
        try:
            alltel.append(tel)
        except:
            alltel.append('N/A')
        try:
            allemail.append(email)
        except:
            allemail.append('N/A')

然后,您将拥有尽可能多的可用字段中的数据。如果名称不确定是否存在,也可以使用try, except。这种方法将您的数据保存在同一个索引中,即条目alltel[x]allemail[x]和{}都指向同一个实体。在

我建议您使用for循环,因此无论它将附加到数组的值的数目是多少,如果没有值,则不会追加任何值:

for single_name in name:
    allname.append(single_name)
for single_tel in tel:
    alltel.append(single_tel)
for single_email in email:
    allemail.append(single_email)

相关问题 更多 >

    热门问题