Html I' 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>','')
但是我需要将更改保存在列表中。
答案 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!