Python web scrape失败

时间:2016-04-24 15:07:59

标签: python web-scraping beautifulsoup

希望有人可以帮助我完成网络搜索。它去年每天工作得很好,冬季关闭,现在页面上的某些内容已经改变,它已经不再有效了。 我需要提取列出的每个站点的危险等级代码。去年,随着BS寻找“tr”标签,它完美地运作。我很难过。

以下是示例区域的网站:http://bcwildfire.ca/hprScripts/DgrCls/index.asp?Region=4

这是我的代码,直到BS做其事情的地方:

from urllib import urlopen
from HTMLParser import HTMLParser
import string, datetime, sys
from bs4 import BeautifulSoup

# Fire Danger ratings by station start at index 4

class HTMLCleaner(HTMLParser):
    container = ""
    def handle_data(self, data):
        self.container = self.container + "," + data
        return self.container

todayChk = datetime.date.today().strftime("%d-%b-%Y")

##FireRegions = {'Prince George': '4', 'Northwest': '3', 'Cariboo': '7', 'Kamloops': '5', 'Southeast': '6'}
FireRegions = {'Prince George': '4'}

Regs = FireRegions.keys()
Reg = 0

while Reg < len(FireRegions):
    print Regs[Reg] + " Region"
    content = urlopen('http://bcwildfire.ca/hprScripts/DgrCls/index.asp?Region='+FireRegions[Regs[Reg]]).read()
    soup = BeautifulSoup(content, 'html.parser')
    PGStats = soup.body.find_all("tr")
    print PGStats
    Reg+=1

非常感谢您提供解决方案。

1 个答案:

答案 0 :(得分:2)

看起来问题是因为页面上有额外的tabletr元素。您需要将搜索范围缩小到具有电台和评级的特定table

一个选项,因为我们可以使用idclass属性来区分所需的表格,而不是按文字找到表格标题然后是go up to the parent table element

table = soup.find(text="[Dgr Rgn] Station").find_parent("table")
for row in table.find_all("tr")[1:]:
    cells = row.find_all("td")
    print(cells[0].get_text(), cells[1].get_text())

打印:

(u'[1] BEAR LAKE', u'3')
(u'[1] BEDNESTI', u'3')
(u'[1] CHETWYND (EC)', u'4')
...
(u'[1] VALEMOUNT HUB', u'4')
(u'[1] VANDERHOOF HUB', u'4')
(u'[1] WONOWON', u'4')