我是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)
虽然第二个打印声明工作正常,但第一个打印声明应打印谷歌,但它会给出一个空白列表。
答案 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