为什么urllib不能与本地网站合作?

时间:2015-01-14 01:45:21

标签: python html regex html-parsing urllib

我有一个urllib的问题,我似乎无法抓住我自己的本地网站。我可以打印出网站的所有内容,但正则表达式或其他东西不起作用。我用当前代码得到的输出只是[]。所以我想知道我做错了什么?我有一段时间没有使用过urllib,所以我很可能错过了一些明显的东西。 Python文件:

import urllib
import re

htmlfile=urllib.urlopen('IP of server')
htmltext=htmlfile.read()
regex="<body>(.+?)</body>"
pattern=re.compile(regex)
price=re.findall(pattern,htmltext)
print price 

HTML文件:

<html>
    <body>
        This is a basic HTML file to try to get my python file to work...
    </body>
</html>

提前感谢一大堆!

3 个答案:

答案 0 :(得分:2)

这里有些不对劲。您需要启用dotall修改器,以强制点跨越换行符序列。至于包含已编译的正则表达式和调用findall的以下行,它应该是:

regex = "<body>(.+?)</body>"
pattern = re.compile(regex, re.DOTALL)
price = pattern.findall(htmltext)

可以简化如下,我建议从匹配结果中丢弃空白。

price = re.findall(r'(?s)<body>\s*(.+?)\s*</body>', htmltext)

为了将来参考,请使用BeautifulSoup等解析器来提取数据而不是正则表达式。

答案 1 :(得分:2)

或者,实际上这个should be preferred to regex-based approach - 使用 HTML Parser

示例(使用BeautifulSoup):

>>> from bs4 import BeautifulSoup
>>> 
>>> data = """
... <html>
...     <body>
...         This is a basic HTML file to try to get my python file to work...
...     </body>
... </html>
... """
>>> soup = BeautifulSoup(data)
>>> print soup.body.get_text(strip=True)
This is a basic HTML file to try to get my python file to work...

请注意代码是多么简单,没有&#34; regex magic&#34;。

答案 2 :(得分:1)

.与换行符不匹配,除非您设置了dot-matches-all s修饰符:

re.compile('<body>(.+?)</body>', re.DOTALL)