为什么 urllib 不适用于本地网站?
Why doesn't urllib work with local website?
我的 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>
提前致谢!
点 .
不匹配换行符,除非您设置点匹配所有 s
修饰符:
re.compile('<body>(.+?)</body>', re.DOTALL)
这里有一些错误。您需要启用 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 等解析器而不是正则表达式来提取数据。
或者,实际上这个 should be preferred to regex-based approach - 使用 HTML 解析器.
示例(使用 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...
请注意代码是多么简单,没有 "regex magic"。
我的 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>
提前致谢!
点 .
不匹配换行符,除非您设置点匹配所有 s
修饰符:
re.compile('<body>(.+?)</body>', re.DOTALL)
这里有一些错误。您需要启用 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 等解析器而不是正则表达式来提取数据。
或者,实际上这个 should be preferred to regex-based approach - 使用 HTML 解析器.
示例(使用 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...
请注意代码是多么简单,没有 "regex magic"。