在python中使用findall没有得到预期的结果

时间:2013-11-18 15:54:59

标签: python regex web-scraping

我是python的新手(使用2.7.3)。我试图使用python进行网络抓取,但我没有获得预期的输出:

import urllib
import re
regex='<title>(.+?)<\title>'
pattern=re.compile(regex)
dummy="fsdfsdf<title>Test<\title>dsf"
html=urllib.urlopen('http://www.google.com')
text=html.read()
print pattern.findall(text)
print pattern.findall(dummy)

虽然第二个打印声明工作正常,但第一个打印声明应打印谷歌,但它会给出一个空白列表。

2 个答案:

答案 0 :(得分:4)

尝试更改:

regex='<title>(.+?)<\title>'

regex='<title>(.+?)</title>'

答案 1 :(得分:3)

您错误输入了斜杠:

regex='<title>(.+?)<\title>'

应该是:

regex='<title>(.+?)</title>'

HTML在结束标记时使用转发斜杠。

也就是说,不要使用正则表达式来解析HTML。将HTML与这些表达式匹配变得太复杂,太快了。

使用HTML解析器,Python有几个可供选择。我建议您使用BeautifulSoup,一个受欢迎的第三方库。

BeautifulSoup示例:

from bs4 import BeautifulSoup

response = urllib.urlopen(url)
soup = BeautifulSoup(response.read(), from_encoding=response.info().getparam('charset'))
title = soup.find('title').text