刮刮雅虎收入日历

时间:2015-03-07 09:42:03

标签: python web-scraping yahoo-finance

我是Python新手编程的新手。我想要获得符号和时间。

我能够得到适合我的时间。它只是第一个词,有时是时间,而不是“之前/之后”市场关闭。

但是当涉及到这个符号时,我不想要任何国外市场,所以没有任何东西。在符号中。这是我到目前为止所拥有的。对不起,如果它有点马虎。这是我在python中的第一个真正的程序....

import requests
import urllib2
import re
from bs4 import BeautifulSoup

site= "http://www.nasdaq.com/earnings/report/acrx"
hdr = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
       'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
       'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
       'Accept-Encoding': 'none',
       'Accept-Language': 'en-US,en;q=0.8'}

url = "http://biz.yahoo.com/research/earncal/20150309.html"

content = urllib2.urlopen(url).read()

soup = BeautifulSoup(content)

m = re.findall('center><small>\S+ ', content)
w = re.findall('\?s=\w+',content)

x=0
lp = (len(m))
xlp = lp -1


for x in range (xlp):
    print x, m[x+1][14:], w[x][3:]

1 个答案:

答案 0 :(得分:4)

您可以使用BeautifulSoup来解析HTML,而不是使用正则表达式。您也可以使用time库来获取当前日期。

这是一个用于抓取雅虎财务的示例代码。

import requests
import bs4

def get_earning_data(date):
    html = requests.get("https://biz.yahoo.com/research/earncal/{}.html".format(date), headers={"User-Agent": "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0"}).text
    soup = bs4.BeautifulSoup(html)
    quotes = []
    for tr in soup.find_all("tr"):
        if len(tr.contents) > 3:
            if len(tr.contents[1].contents) > 0:
                if tr.contents[1].contents[0].name == "a":
                    if tr.contents[1].contents[0]["href"].startswith("http://finance.yahoo.com/q?s="):
                        quotes.append({     "name"  : tr.contents[0].text
                                           ,"symbol": tr.contents[1].contents[0].text
                                           ,"url"   : tr.contents[1].contents[0]["href"]
                                           ,"eps"   : tr.contents[2].text if len(tr.contents) == 6 else u'N/A'
                                           ,"time"  : tr.contents[3].text if len(tr.contents) == 6 else tr.contents[2].text
                                       })
    return quotes

print(get_earning_data("20150309"))