Python 为什么';与本地网站合作?

Python 为什么';与本地网站合作?,python,html,regex,html-parsing,urllib,Python,Html,Regex,Html Parsing,Urllib,我对urllib有一个问题,在这个问题上,我似乎无法刮取我自己的本地网站。我可以让它打印出网站的所有内容,但正则表达式或其他东西不起作用。我用当前代码得到的输出只是[]。所以我想知道我做错了什么?我已经有一段时间没有使用urllib了,所以很可能我错过了一些明显的东西。Python文件: import urllib import re htmlfile=urllib.urlopen('IP of server') htmltext=htmlfile.read() regex="<body

我对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 
导入urllib
进口稀土
htmlfile=urllib.urlopen('服务器的IP')
htmltext=htmlfile.read()
regex=“(.+?)”
pattern=re.compile(regex)
price=re.findall(模式,htmltext)
印刷价格
HTML文件:

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

这是一个基本的HTML文件,试图让我的python文件工作。。。

提前多谢

不匹配换行符,除非您设置点匹配所有
s
修改器:

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

不匹配换行符,除非您将点设置为与所有
s
修饰符匹配:

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

这里有一些地方出错。您需要启用“点所有”修改器,该修改器强制点跨越换行符序列。对于包含已编译正则表达式和对
findall
的调用的以下行,它应该是:

regex = "<body>(.+?)</body>"
pattern = re.compile(regex, re.DOTALL)
price = pattern.findall(htmltext)
regex=“(.+?)”
pattern=re.compile(regex,re.DOTALL)
price=pattern.findall(htmltext)
可以简化如下,我建议从匹配结果中删除空白

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

为了便于将来参考,请使用诸如BeautifulSoup之类的解析器来提取数据,而不是正则表达式。

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

regex = "<body>(.+?)</body>"
pattern = re.compile(regex, re.DOTALL)
price = pattern.findall(htmltext)
regex=“(.+?)”
pattern=re.compile(regex,re.DOTALL)
price=pattern.findall(htmltext)
可以简化如下,我建议从匹配结果中删除空白

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

作为将来的参考,请使用诸如BeautifulSoup之类的解析器来提取数据,而不是正则表达式。

或者,实际上,这是一种方法-使用HTML解析器

示例(使用):

>>来自bs4导入组
>>> 
>>>data=”“”
... 
...     
…这是一个基本的HTML文件,用于尝试使我的python文件正常工作。。。
...     
... 
... """
>>>汤=美汤(数据)
>>>打印soup.body.get_文本(strip=True)
这是一个基本的HTML文件,试图让我的python文件工作。。。

请注意,代码是多么简单,没有“regex魔力”。

或者,实际上,这是使用HTML解析器

示例(使用):

>>来自bs4导入组
>>> 
>>>data=”“”
... 
...     
…这是一个基本的HTML文件,用于尝试使我的python文件正常工作。。。
...     
... 
... """
>>>汤=美汤(数据)
>>>打印soup.body.get_文本(strip=True)
这是一个基本的HTML文件,试图让我的python文件工作。。。

请注意,代码是多么简单,没有“regex魔法”。

“我可以让它打印出网站的所有内容”
然后
urllib
工作正常。使用beautifulsoup解析html
“我可以让它打印出网站的所有内容”
Then
urllib
工作正常。使用beautifulsoup解析htmlI太懒了,无法编写此+1;)我试过BeatifulSoup,但它没有找到我的本地IP。@user3818089 nono,
BeautifulSoup
是一个解析器,为它提供smth来解析HTTP请求,你需要使用
urllib
urllib2
请求
。所以我仍然会这样做
htmlfile=urllib.urlopen(“服务器的IP”)
并将其插入
soup=beautifulsou(htmlfile)
?谢谢@user3818089我会使用
urllib2
而不是
urllib
,但是是的,没错。我太懒了,没有写这个+1;)我试过BeatifulSoup,但它没有找到我的本地IP。@user3818089 nono,
BeautifulSoup
是一个解析器,为它提供smth来解析HTTP请求,你需要使用
urllib
urllib2
请求
。所以我仍然会这样做
htmlfile=urllib.urlopen(“服务器的IP”)
并将其插入
soup=beautifulsou(htmlfile)
?谢谢@user3818089我会使用
urllib2
而不是
urllib
,但没错。