用Python提取HTML源码中的注释与去掉注释

遇到一个编程问题,你必须首先想到的是要简化它,简化成一个最简单的问题后,写最简单的代码来解决它,同时只付出最简单的测试代价。

简单HTML源码:

1<!--The loneliest number-->
                        <a>2<!--Can be as bad as one--><b>3

提取上述代码中的注释:

from bs4 import BeautifulSoup, Comment

soup = BeautifulSoup("""1<!--The loneliest number-->
                        <a>2<!--Can be as bad as one--><b>3""")
comments = soup.findAll(text=lambda text:isinstance(text, Comment))

for comment in comments:
    print comment

输出结果:

The loneliest number
Can be as bad as one

去掉上面HTML代码中的注释:

from bs4 import BeautifulSoup, Comment

soup = BeautifulSoup("""1<!--The loneliest number-->
                        <a>2<!--Can be as bad as one--><b>3""")
comments = soup.findAll(text=lambda text:isinstance(text, Comment))
[comment.extract() for comment in comments]
print soup

输出结果:

1
<a>2<b>3</b></a>

参考:

1、How to find the comment tag <!--…--> with BeautifulSoup?

2、BeautifulSoup documentation #Removing elements

时间: 2024-12-06 02:56:45

用Python提取HTML源码中的注释与去掉注释的相关文章

python 打印html源码中xpath

实例: #coding:utf-8 from lxml import etree import urllib url=urllib.urlopen('http://www.baidu.com').read().decode('utf-8') htm=etree.HTML(url) htree=etree.ElementTree(htm) print htree print htm.iter() ###依次打印出每个元素的文本内容和xpath路径 for t in htm.iter(): prin

Python Web Flask源码解读(四)——全局变量

关于我 一个有思想的程序猿,终身学习实践者,目前在一个创业团队任team lead,技术栈涉及Android.Python.Java和Go,这个也是我们团队的主要技术栈. Github:https://github.com/hylinux1024 微信公众号:终身开发者(angrycode) Flask中全局变量有current_app.request.g和session.不过需要注意的是虽然标题是写着全局变量,但实际上这些变量都跟当前请求的上下文环境有关,下面一起来看看. current_ap

从Android4.0源码中提取的截图实现(在当前activity中有效,不能全局截图)

原文:http://blog.csdn.net/xu_fu/article/details/39268771 从这个大神的博客看到了这篇文章,感觉写的挺好的.挺实用的功能.虽然是从源码中提取的,但是看得出费了一番心思.而且讲解的很透彻.我这里补充的是这个仅仅能在一个acitvity中使用,不能实现在服务中截图.getWindow().getDecorView()这个方法得到的是当前根视图,这样等于得到了当前屏幕展示的图片,截取即可.这里为了方便没有做图片保存的工作.仅仅作为演示. 一.使用方式

Python源码中的PyCodeObject

1.Python程序的执行过程 Python解释器(interpreter)在执行任何一个Python程序文件时,首先进行的动作都是先对文件中的Python源代码进行编译,编译的主要结果是产生的一组Python的字节码(byte code),然后将编译的结果交给Python虚拟机(Virtual Machine),由虚拟机按照顺序一条一条地执行字节码,从而完成对Python程序的执行动作. 对比java的执行: java:     .java-->(javac)-->.class-->(

Python:SQLMap源码精读—start函数

源代码 1 def start(): 2 """ 3 This function calls a function that performs checks on both URL 4 stability and all GET, POST, Cookie and User-Agent parameters to 5 check if they are dynamic and SQL injection affected 6 """ 7 if n

Python:SQLMap源码精读之基于错误的盲注(error-based blind)

目标网址 http://127.0.0.1/shentou/sqli-labs-master/Less-5/?id=1 Payload的生成 1 <test> 2 <title>MySQL >= 5.0 AND error-based - WHERE or HAVING clause</title> 3 <stype>2</stype> 4 <level>1</level> 5 <risk>0</r

Python:Sqlmap源码精读之解析xml

XML <?xml version="1.0" encoding="UTF-8"?> <root> <!-- MySQL --> <dbms value="MySQL"> <cast query="CAST(%s AS CHAR)"/> <length query="LENGTH(%s)"/> <isnull query=&quo

Python解析器源码加密系列之(二):一次使用标准c的FILE*访问内存块的尝试

摘要:由于近期打算修改Python解释器以实现pyc文件的加密/解密,出于保密的要求,解密之后的数据只能放在内存中,不能写入到文件中.但是后续的解析pyc文件的代码又只能接受FILE*作为入参,所以就提出了一种把通过FILE*来访问内存的需求,下文是针对这个需求的几个方面的尝试及其结论. 以下尝试的前提是:Win7 + VS2010. 在vc中,FILE其实就是_iobuf,定义如下: struct _iobuf { char *_ptr; //文件输入的下一个位置 int _cnt; //当前

Python:SQLMap源码精读之基于时间的盲注(time-based blind)

基于时间的盲注(time-based blind) 测试应用是否存在SQL注入漏洞时,经常发现某一潜在的漏洞难以确认.这可能源于多种原因,但主要是因为Web应用未显示任何错误,因而无法检索任何数据. 对于这种情况,要想识别漏洞,向数据库注入时间延迟并检查服务器响应是否也已经延迟会很有帮助.时间延迟是一种很强大的技术,Web服务器虽然可以隐藏错误或数据,但必须等待数据库返回结果,因此可用它来确认是否存在SQL注入.该技术尤其适合盲注. 源码解释 代码位置:在checkSqlInjection函数中