0

我正在使用 python 3 来抓取网站并打印一个值。这是代码

import urllib.request
import re

url = "http://in.finance.yahoo.com/q?s=spy"  
hfile = urllib.request.urlopen(url)
htext = hfile.read().decode('utf-8')
regex = '<span id="yfs_l84_SPY">(.+?)</span>'
code = re.compile(regex)
price = re.findall(code,htext)
print (price)

当我运行这个片段时,它会打印一个空列表,即。[],但我期待一个值,例如483.33

我做错了什么?帮助

4

2 回答 2

2

我不得不建议你不要使用正则表达式来解析 HTML,因为HTML 不是常规语言。是的,你可以在这里使用它。这不是一个好习惯。

我想您遇到的最大问题是您在该页面上寻找的真实内容 . 注意案例。 idspanyfs_l84_spy

也就是说,这是BeautifulSoup中的一个快速实现。

import urllib.request
from bs4 import BeautifulSoup

url = "http://in.finance.yahoo.com/q?s=spy"  
hfile = urllib.request.urlopen(url)
htext = hfile.read().decode('utf-8')
soup = BeautifulSoup(htext)
soup.find('span',id="yfs_l84_spy")
Out[18]: <span id="yfs_l84_spy">176.12</span>

并获得该数字:

found_tag = soup.find('span',id="yfs_l84_spy") #tag is a bs4 Tag object
found_tag.next #get next (i.e. only) element of the tag
Out[36]: '176.12'
于 2013-10-28T19:52:37.807 回答
0

您没有正确使用正则表达式,有两种方法可以做到这一点:

1.

regex = '<span id="yfs_l84_spy">(.+?)</span>'
code = re.compile(regex)
price = code.findall(htext)

2.

regex = '<span id="yfs_l84_spy">(.+?)</span>'
price = re.findall(regex, htext)

应该注意的是,Python 正则表达式库在内部进行了一些缓存,因此预缓存的效果有限。

于 2013-10-28T19:37:55.870 回答