在python中使用findall无法获得预期的结果

2024-09-27 00:22:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python新手(使用2.7.3)。我曾尝试使用python进行web抓取,但没有得到预期的结果:

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)

虽然第二个打印语句工作正常,但第一个应该打印谷歌,但它给出了一个空白列表。你知道吗


Tags: textimportrewebtitlehtmlurllibregex
2条回答

尝试更改:

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

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

你打错了斜杠:

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

相关问题 更多 >

    热门问题