0

好吧,我到这里就无计可施了。对于我的班级,我们应该从 wunderground.com 网站上抓取数据。我们不断遇到问题(错误消息),或者代码可以正常运行,但 .txt 文件将不包含任何数据。这很烦人,因为我需要这样做!所以这是我的代码。

f = open('wunder-data1.txt', 'w')
for m in range(1, 13):
for d in range(1, 32):
    if (m == 2 and d > 28):
        break
    elif (m in [4, 6, 9, 11] and d > 30):
        break
    url = "http://www.wunderground.com/history/airport/KBUF/2009/" + str(m) + "/" + str(d) + "/DailyHistory.html"
    page = urllib2.urlopen(url)
    soup = BeautifulSoup(page, "html.parser")
    dayTemp = soup.find("span", text="Mean Temperature").parent.find_next_sibling("td").get_text(strip=True)
    if len(str(m)) < 2:
        mStamp = '0' + str(m)
    else:
        mStamp = str(m)
    if len(str(d)) < 2:
        dStamp = '0' +str(d)
    else:
        dStamp = str(d)
    timestamp = '2009' + mStamp +dStamp
    f.write(timestamp.encode('utf-8') + ',' + dayTemp + '\n')
    f.close()

也很抱歉,这段代码可能不是 Python 中的正确缩进。我不擅长这个。

更新:所以有人回答了下面的问题,它有效,但我意识到我提取了错误的数据(哎呀)。所以我放了这个:

    import codecs
    import urllib2
    from bs4 import BeautifulSoup

    f = codecs.open('wunder-data2.txt', 'w', 'utf-8')

    for m in range(1, 13):
        for d in range(1, 32):
            if (m == 2 and d > 28):
                break
            elif (m in [4, 6, 9, 11] and d > 30):
                break

            url = "http://www.wunderground.com/history/airport/KBUF/2009/" + str(m) + "/" + str(d) + "/DailyHistory.html"
            page = urllib2.urlopen(url)
            soup = BeautifulSoup(page, "html.parser")

            dayTemp = soup.findAll(attrs={"class":"wx-value"})[5].span.string
            if len(str(m)) < 2:
                mStamp = '0' + str(m)
            else:
                mStamp = str(m)
            if len(str(d)) < 2:
                dStamp = '0' +str(d)
            else:
                dStamp = str(d)

            timestamp = '2009' + mStamp +dStamp

            f.write(timestamp.encode('utf-8') + ',' + dayTemp + '\n')

    f.close()

所以我很不确定。我想要做的是数据刮

4

1 回答 1

0

在尝试执行您的代码时,我遇到了以下错误(并在下面修复了它们):

  1. 嵌套循环的缩进无效。
  2. 缺少导入(顶部的行),但也许您只是将它们从粘贴中排除。
  3. 试图将“utf-8”编码字符串写入“ascii”文件。为了解决这个问题,我使用codecs模块将文件打开f为“utf-8”。
  4. 该文件在循环内关闭,这意味着在第一次写入它之后,它将被关闭,然后下一次写入将失败(因为它已关闭)。我将该行移动到循环之外以关闭文件。

现在据我所知(没有你告诉我们你真正想要这段代码做什么),它工作了吗?至少没有立即弹出错误...

import codecs
import urllib2
from bs4 import BeautifulSoup

f = codecs.open('wunder-data1.txt', 'w', 'utf-8')

for m in range(1, 13):
    for d in range(1, 32):
        if (m == 2 and d > 28):
            break
        elif (m in [4, 6, 9, 11] and d > 30):
            break

        url = "http://www.wunderground.com/history/airport/KBUF/2009/" + str(m) + "/" + str(d) + "/DailyHistory.html"
        page = urllib2.urlopen(url)
        soup = BeautifulSoup(page, "html.parser")

        dayTemp = soup.find("span", text="Mean Temperature").parent.find_next_sibling("td").get_text(strip=True)

        if len(str(m)) < 2:
            mStamp = '0' + str(m)
        else:
            mStamp = str(m)
        if len(str(d)) < 2:
            dStamp = '0' +str(d)
        else:
            dStamp = str(d)

        timestamp = '2009' + mStamp +dStamp

        f.write(timestamp.encode('utf-8') + ',' + dayTemp + '\n')

f.close()

正如对您问题的评论所暗示的那样,这里还有其他需要改进的地方,我没有涉及到 - 我只是试图让您发布的代码执行。

于 2017-01-15T01:34:45.263 回答