将BeautifulSoup ResultSet转换为字符串列表

时间:2018-02-14 11:18:16

标签: python web-scraping beautifulsoup

我正在尝试使用Python将评论的详细信息从here划分为CSV。每部电影都有一个星级,由图像表示,有一个类('icon-star-fill'或'icon-star-half')。我正在尝试编写一个函数来分配一个数值。

我到目前为止的代码是返回一个bs4.element.ResultSet,每个元素都有一个Tag

    [<i class="icon-star-full"></i>, <i class="icon-star-full"></i>]

我想将其转换为字符串列表,例如

    ["<i class="icon-star-full"></i>", "<i class="icon-star-full"></i>"]

我已经尝试过soup_obj.text,soup_obj.content,他们正在返回空字符串。

这是我的代码

    from bs4 import BeautifulSoup
    import requests
    result = requests.get(url='http://www.rogerebert.com/reviews')
    result_content = result.content
    soup_obj = BeautifulSoup(result_content, 'html5lib')
    wrapper_class = soup_obj.find('div', id='review-list')
    for x in wrapper_class.find_all('figure'):
        convoluted_rating = x.find('span', class_='star-rating').find_all('i')
        print convoluted_rating

我见过this并且它返回一个带有None的数组,就像这样

    [None,None]

1 个答案:

答案 0 :(得分:1)

您可以遍历ResultSet并致电tag.prettify

tags = [] 
for x in wrapper_class.find_all('figure'):
    tags.extend(
         (i.prettify() for i in x.find('span', class_='star-rating').find_all('i'))
    )

print(tags)

['<i class="icon-star-full">\n</i>\n',
 '<i class="icon-star-full">\n</i>',
 '<i class="icon-star-full">\n</i>\n',
 ...
]