python RE findall()返回值是一个完整的字符串

python RE findall()返回值是一个完整的字符串,python,html,regex,web-crawler,Python,Html,Regex,Web Crawler,我正在编写一个爬虫程序来获取html文件的某些部分。但是我不知道如何使用re.findall() 这里有一个例子,当我想找到所有。。。在文件的一部分,我可以这样写: re.findall("<div>.*\</div>", result_page) re.findall('%1!',结果页面) 如果结果页面是字符串“,则结果将为 ['<div> </div> <div> </div>'] [“”] 只有整个字符串。这

我正在编写一个爬虫程序来获取html文件的某些部分。但是我不知道如何使用re.findall()

这里有一个例子,当我想找到所有。。。在文件的一部分,我可以这样写:

re.findall("<div>.*\</div>", result_page)
re.findall('%1!',结果页面)
如果结果页面是字符串
,则结果将为

['<div> </div> <div> </div>']
[“”]
只有整个字符串。这不是我想要的,我期待两个div分开。我该怎么办?

引用

“*”
“+”
“?”
限定符都是贪婪的;他们也很般配 尽可能多的文本。在限定符之后添加
“?”
,使其执行 以非贪婪或最小的方式匹配;尽可能少的字符 将匹配

只需添加一个问号:

In [6]: re.findall("<div>.*?</div>", result_page)
Out[6]: ['<div> </div>', '<div> </div>']
[6]中的
:关于findall(“.*”,结果页)
输出[6]:['',]
另外,您不应该使用正则表达式来解析HTML,因为有专门为此设计的HTML解析器。示例使用:

[7]中的
:导入bs4
[8]中:[str(tag)表示bs4.BeautifulSoup中的tag(结果页面)('div')]
出[8]:['',]
*
是一个运算符,您希望使用
*?
进行非贪婪的匹配

re.findall("<div>.*?</div>", result_page)

为什么我不应该使用正则表达式来解析HTML?正确的方法是什么?@alvinzoo总是有HTML解析器,例如Python的Beautiful Soup。您可能需要阅读。如果下面的答案之一解决了您的问题,您应该接受它。
re.findall("<div>.*?</div>", result_page)
from bs4 import BeautifulSoup
soup = BeautifulSoup(html)
soup.find_all('div')