我正在尝试使用python扫描各种网站。以下代码对我来说很好。
import urllib
import re
htmlfile =urllib.urlopen("http://google.com")
htmltext=htmlfile.read()
regex='<title>(.+?)</title>'
pattern=re.compile(regex)
title= re.findall(pattern,htmltext)
print title
为了获取正文内容,我将其更改如下:
import urllib
import re
htmlfile =urllib.urlopen("http://google.com")
htmltext=htmlfile.read()
regex='<body>(.+?)</body>'
pattern=re.compile(regex)
title= re.findall(pattern,htmltext)
print title
上面的代码给了我一个空的方括号。我不知道我做错了什么。请帮忙
答案 0 :(得分:5)
一般来说,尝试parse HTML with regular expressions是一个坏主意。
出色的beautiful soup library使你想做的事情变得微不足道。
import bs4
html = '''
<head>
</head>
<body>
<div></div>
</body>
'''
print(bs4.BeautifulSoup(html).find('body'))
Python也有一个HTML parser in its standard library,它基本上是一个功能较少的美味汤解析器版本。
如果你仍然坚持使用正则表达式,这应该可行。
import re
print(re.findall('<body>(.*?)</body>', html, re.DOTALL))
这也可能听起来很愚蠢,但请确保htmltext
字符串中确实存在正文标记。
答案 1 :(得分:1)
要回答这个问题,实际上如果你通过HTMLtext
,你将找不到两个身体标签。但我绝对建议你采取美丽的汤路线@rectangletangle提及