Python 3.4 正则表达式
我现在正在开始做一个网页抓取工具,已经有一段时间没用过Python了。我知道我的代码可能也很乱。没关系。
def retrieveHTML():
import re
import urllib.request
from urllib.request import urlopen
urls = ["http://finance.yahoo.com/q?s=^dji", "http://finance.yahoo.com/q?s=^gspc"]
i = 0
while i < len(urls):
htmlfile = urllib.request.urlopen(urls[i])
htmltext = htmlfile.read()
if (i == 0):
regex = b'<span id="yfs_110_^dji">(.+?)</span>'
if (i == 1):
regex = b'<span id="yfs_110_^gspc">(.+?)</span>'
pattern = re.compile(regex)
price = pattern.match(htmltext)
print (price)
i += 1
retrieveHTML()
这个正则表达式是用来找股票价格的,但它返回的是“None”(什么都没有)。你可以通过检查网页上方大价格的元素来找到那部分HTML,以防你对这个有任何疑问。
2 个回答
1
在正则表达式中,字符 ^
有特别的含义——它表示一行的开头,这似乎不是你想要的。如果你想匹配实际的字符 ^
,你需要对它进行转义:
if (i == 0):
regex = b'<span id="yfs_110_\\^dji">(.+?)</span>'
if (i == 1):
regex = b'<span id="yfs_110_\\^gspc">(.+?)</span>'
2
我知道这个话题有点跑题,:).
我想建议提问者使用xml包里的xpath功能。我也会抓取像雅虎这样的网站。使用xml包让我省了很多时间和精力。用正则表达式来做所有事情真是太麻烦了。