更优雅的方法来创建BeautifulSoup.findAll的行列表

时间:2013-08-23 22:05:34

标签: python beautifulsoup

我正在使用BeautifulSoup编写Web解析器。我创建了一个用bs.findAll(text=True)生成的行列表,然后将行拆分为行并在那里应用我的逻辑。 html_payload是一个任意网页。

我到目前为止所使用的代码是有效的,但它不是很漂亮,并且让我觉得必须有更好,更精确的编写方式。

    data_to_parse = BeautifulSoup(html_payload)
    lines_to_parse = []

    d = data_to_parse.findAll(text=True)
    for line in d:
        for line2 in line.strip().split('\n'):
            if line2:
                lines_to_parse.append(line2)

    for line in lines_to_parse:
        pass # here's where I start analyzing results

是否有人可以提出更好的方法来解决这个问题?

2 个答案:

答案 0 :(得分:1)

只需get all the text at once并将其分成几行:

data_to_parse = BeautifulSoup(html_payload)
for line in data_to_parse.get_text().split("\n"):
    pass  # ... do something

答案 1 :(得分:1)

您可以使用列表理解:

lines_to_parse = [line2 for line in data_to_parse.findAll(text=True) for line2 in line.strip().split('\n') if line2]

或者,您实际上可以将收集和分析步骤结合起来:

d = data_to_parse.findAll(text=True)
for line in d:
     for line2 in line.strip().split('\n'):
         if line2:
             # analyze here

或者,请记住,您没有大量使用BeautifulSoupxmltodict可能会帮助您将数据收集到列表中,看一看。

希望有所帮助。