希望有人可以帮助我完成网络搜索。它去年每天工作得很好,冬季关闭,现在页面上的某些内容已经改变,它已经不再有效了。 我需要提取列出的每个站点的危险等级代码。去年,随着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
非常感谢您提供解决方案。
答案 0 :(得分:2)
看起来问题是因为页面上有额外的table
和tr
元素。您需要将搜索范围缩小到具有电台和评级的特定table
。
一个选项,因为我们可以使用id
或class
属性来区分所需的表格,而不是按文字找到表格标题然后是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')