Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从html源代码中删除某些链接的Python筛选器列表_Python_Regex_Beautifulsoup - Fatal编程技术网

从html源代码中删除某些链接的Python筛选器列表

从html源代码中删除某些链接的Python筛选器列表,python,regex,beautifulsoup,Python,Regex,Beautifulsoup,我有html源代码,我想过滤掉一个或多个链接,并保留其他链接 我已将我的筛选器设置为以“*”作为通配符: <a*>Link1</a>‚ <a*>Link2</a>‚ or <a*>Link3</a> <a*>A bad link*</a> some text* <a*>update*</a> other text right before link <a*>clic

我有html源代码,我想过滤掉一个或多个链接,并保留其他链接

我已将我的筛选器设置为以“*”作为通配符:

<a*>Link1</a>‚ <a*>Link2</a>‚ or <a*>Link3</a>
<a*>A bad link*</a>
some text* <a*>update*</a>
other text right before link <a*>click here</a>
Link1“Link2”或Link3
坏链接*
一些文本*更新*
链接前的其他文本单击此处
我想使用python从html源代码中过滤掉链接的每个实例。我可以将列表加载到数组中。我需要一些关于过滤器的帮助。每个换行符都表示一个单独的过滤器,我只想删除链接而不是文本

我对python和regex/beautifulsoup仍然很陌生。即使您能为我指出正确的方向,我们也将不胜感激。

要删除
标记,只保留那些标记中不包含的文本:

>>> from BeautifulSoup import BeautifulSoup as bs
>>> markup = """<a*>Link1</a> <a*>Link2</a> or <a*>Link3</a>
... <a*>A bad link*</a>
... some text* <a*>update*</a>
... other text right before link <a*>click here</a>"""
>>> soup = bs(markup)
>>> TAGS_TO_EXTRACT = ('a',)
>>> for tag in soup.findAll():
...   if tag.name in TAGS_TO_EXTRACT:
...     tag.extract()
...
>>> soup
  or

some text*
other text right before link

只需重新组装整个文档,丢弃一部分信息,就可以对其进行解析,从而生成大量非必需的代码

所以,我认为这是正则表达式的一个更好的工作。Python的正则表达式可以有一个回调函数,允许用户自定义替换字符串。在这种情况下,只需创建一个与“坏链接”、中间文本和结束链接标记匹配的regexp,并只保留中间文本

import re

markup = """<a*>Link1</a>‚ <a*>Link2</a>‚ or <a*>Link3</a>
<a*>A bad link*</a>
some text* <a*>update*</a>
other text right before link <a*>click here</a>"""

filtered = re.sub (r"(\<a.*?>)(.*?)(\</a\s*\>)",lambda match: match.groups()[1] , markup)
重新导入
标记=“链接1”链接2”或链接3
坏链接*
一些文本*更新*
链接前的其他文本单击此处“”
filtered=re.sub(r“(\)(.*)(\)”,lambda match:match.groups()[1],标记)

如果只有一行wqeqweq而没有其他内容,那么一个糟糕的链接是什么?您应该使用HTML解析器,比如HTMLParser或BeautifulSoup。HTML不应该用regexI解析我相信这个来自上一个StackOverflow问题的链接是合适的:我同意Ryan-使用类似BeautifulSoup的HTML解析器。@damir是的,每一行都是一个单独的过滤器,我只想删除链接(),如果regex不是正确的应用程序,textBeautifulSoup不是我的选项
import re

markup = """<a*>Link1</a>‚ <a*>Link2</a>‚ or <a*>Link3</a>
<a*>A bad link*</a>
some text* <a*>update*</a>
other text right before link <a*>click here</a>"""

filtered = re.sub (r"(\<a.*?>)(.*?)(\</a\s*\>)",lambda match: match.groups()[1] , markup)