如何从Python中删除列表中项目的<br/>和标签?

时间:2017-03-26 04:21:27

标签: python python-3.x replace web-scraping

Html I&#39; m scraping:

<tr>
    <td align="left" bgcolor="#ffff99">
        <font size="2">
            <a href="some/link.htm">
                <b>SomeStuff</b>
            </a>
        </font>
    </td>
</tr>
</tr>
    <td align="left" bgcolor="#ffff99">
        <font size="2">
            <a href="some/link2.htm">
                <b>SomeMoreStuff</b>
            </a>
        </font>
    </td>
</tr>

我如何抓取信息:

my_list = []
for i in soup.find_all('a',href=re.compile('some/link')):
    my_list.append(str(i.find('b')))
    my_list.append(i['href'])

我需要从列表中的元素中删除HTML标记。
但是,当我创建循环时,它不会保存列表中的任何更改。我的列表看起来像这样:

my_list = ['<br>SomeStuff</br>','some/link.htm',
           '<br>SomeMoreStuf</br>', 'some/link2.htm',
           '<br>EvenMoreStuff</br>', 'some/link3.htm']

我试过这个:

for i in my_list:
    i = i.replace('<br>','')
    i = i.replace('</br>','')

我试过这个:

for i in my_list:
    if '<br>' in i:
        i = i.replace('<br>','')
    if '</br> in i:    
        i = i.replace('</br>','')

这些都没有在原始列表中进行任何更改。我可以通过不将更改存储在任何内容中来打印出我想要的更正:

for i in my_list:
    i.replace('<br>','')

但是我需要将更改保存在列表中。

3 个答案:

答案 0 :(得分:1)

所有解决方案都有效,您只是忘记更新列表。

for i, element in enumerate(my_list):
    element = element.replace('<br>','')
    element = element.replace('</br>','')
    my_list[i] = element

现在打印my_list输出:

  

[&#39; SomeStuff&#39;,&#39; some / link.htm&#39;,&#39; SomeMoreStuf&#39;,&#39; some / link2.htm&#39;,&# 39; EvenMoreStuff&#39;,&#39; some / link3.htm&#39;]

您还可以使用列表推导,这将产生相同的结果:

my_list = [i.replace('<br>', '').replace('</br>', '') for i in my_list]

答案 1 :(得分:0)

如果所有字符串仅在字符串的开头和结尾都有标记,则可以对字符串进行切片以删除它们。请尝试以下代码:

for lst in my_list:
    if '<br>' in lst:
        my_list.append(lst[4:-5])
        my_list.remove(lst)

编辑:

从@ Vallentin的回答中有更多的pythonic方法:

for i, lst in enumerate(my_list):
      if '<br>' in lst:
          my_list[i] = lst[4:-5]

编辑:

实际上,您不需要从一开始就将结果转换为字符串。对于此代码:

str(i.find('b'))

请尝试

或者

i.get_text()

i.b.get_text()

我认为其中一个应直接为您提供数据内容。因此,您不需要在此之后删除标记。

希望它有所帮助。

答案 2 :(得分:0)

所以我最终通过将两个元素写入excel文件然后使用&#39;查找并替换&#39;来解决问题。在excel!