如何从Python 2中的表中有选择地废弃数据

时间:2016-01-22 19:14:55

标签: python python-2.7 web-scraping beautifulsoup

我正在开发一个自己的小项目,并尝试围绕网络报废。

我正在使用Python 2和BeautifulSoap模块(但也尝试过其他模块,尝试使用re模块,其他模块)。

简而言之,鉴于该网站:http://www.bankofcanada.ca/rates/exchange/daily-closing-past-five-day/我想收集有关每种货币汇率的信息,但代码更灵活。

以下是我的例子:

import urllib2
from bs4 import BeautifulSoup
import string
import re

myurl = 'http://www.bankofcanada.ca/rates/exchange/daily-closing-past-five-day/'
soup  = BeautifulSoup(urllib2.urlopen(myurl).read(), "lxml")

dataTables = soup.find_all('td')

brandNewList = []

for x in dataTables:
    text = x.get_text().strip()
    brandNewList.append(text)
    #print  text

for index, item in enumerate(brandNewList):
    if item == "U.S. dollar (close)":
        for item in brandNewList[index:6]:
            print item

显示:

$ python crawler.py
U.S. dollar (close)
1.4530
1.4557
1.4559
1.4490
1.4279

因此,正如您所看到的,我可以通过废弃'td'标签来显示与每种货币相对应的数据;如果我将'th'与'td'标签组合使用,我可以更具体。 但是,如果我不想指定确切的字符串“美元(关闭)”,如何使脚本模式适应不同的网站呢? 例如,我想从终端输入“US”/“us”作为参数,脚本会根据不同网站上的列名称,单独返回与美元相对应的值吗?

另外,我是Python的初学者,所以你能告诉我更简洁的重写网络爬虫的方法吗?感觉就像我用一种“愚蠢”的方式写它,主要是:)

1 个答案:

答案 0 :(得分:0)

  

如何使脚本模式适应不同的网站?

不同的网站有着不同的标记,在你的情况下几乎不可能建立通用和可靠的位置机制。根据您要抓取的网站数量,您可以使用EAFP approach循环使用不同的定位功能,直到您成功获得货币汇率。

请注意,某些资源提供公共或私有API,您并不需要抓它们。

顺便说一下,您可以找到U.S. dollar (close)标签并获取following td siblings来改善您的代码:

us_dollar_label = soup.find("td", text="U.S. dollar (close)")
rates = [td.get_text() for td in us_dollar_label.find_next_siblings("td")]