Python 3.4 正则表达式

0 投票
2 回答
694 浏览
提问于 2025-04-18 00:23

我现在正在开始做一个网页抓取工具,已经有一段时间没用过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包让我省了很多时间和精力。用正则表达式来做所有事情真是太麻烦了。

撰写回答