我使用BeautifulSoup来解析网站并存储内容。它采用以下形式:
records = [[[<p>data_1_1</p>], [<p>data_1_2</p>],[], [<li>data_1_3</li>]],
[[<p>data_2_1</p>], [<p>data_2_2</p>], [], [<li>data_2_3</li>]]]
我无法做到这一点:
records = [["data_1_1", "data_1_2", "data_1_3"],
["data_2_1", "data_2_2", "data_2_3"]]
我尝试了列表推导:
text_records = [sum(record, []) for record in records]
但该文字仍包含在<p>
或<li>
标记中。
text_records = [item.string for item in sum(record, []) for record in records]
从标签中取出文本,但是这会给出一个大的列表,重复多次相同的值。
我知道python中的列表推导有很多,我已经搜索过了,但我找不到任何可以帮助解决这种情况。
答案 0 :(得分:1)
编辑 - 即使对于多个项目也是如此:
[sum([v.string for v in [item for item in record if item]], []) for record in records]
添加总和将确保每个记录的所有列表合并为一个。
原件:
只要您始终只有一个项目的内部列表,这应该可以正常工作:
[[item[0].string for item in row if item] for row in records]
这将遍历每条记录,确保记录与if语句一起存在,然后将列表的第一个元素以其字符串格式附加到新记录中。
答案 1 :(得分:0)
这将完成工作就好了(虽然这很多for循环很烦人,欢迎任何建议)。
records1 = [BeautifulSoup(k).text for i in records for j in i for k in j]