Всем привет!
Столкнулся с такой задачей. При парсинге xml с помощью Beautiful soup получаю неверный результат. Например, есть суп:
<xy:a>
<xz:b>1</xz:b>
<xz:d>2</xz:d>
</xy:a>
<xy:a>
<xz:b>3</xz:b>
<xz:c>4</xz:c>
<xz:d>5</xz:d>
</xy:a>
Пытаюсь получить данные:
get_b = soup.find_all("xy:a")
get_b_str = str(get_b)
get_b_re = re.findall(r"<xz:b>(.*?)</xz:b>", get_b_str)
get_c = soup.find_all("xy:a")
get_c_str = str(get_c)
get_c_re = re.findall(r"<xz:c>(.*?)</xz:c>", get_c_str)
get_d = soup.find_all("xy:a")
get_d_str = str(get_d)
get_d_re = re.findall(r"<xz:d>(.*?)</xz:d>", get_d_str)
В итоге получаю: get_b_re = ['1', '3'], get_c_re = ['4'], get_d_re = ['2', '5'].
При попытке вставить эти данные в БД:
result = list(zip_longest(get_b_re, get_c_re, get_d_re, fillvalue=''))
sql = 'INSERT INTO table (b, c, d) VALUES (?, ?, ?)'
cur.executemany(sql, result)
я получаю в таблице:
b | c | d
1 | 4 | 2
3 | - | 5
что неправильно. Можно ли как-то при отсутствии тэга "xz:c" в первом случае получить get_c_re = ['', '4']?