【发布时间】:2019-11-24 09:50:12
【问题描述】:
我正在为 msn money 创建一个刮板。我从网站上获取值并通过几个 for 循环运行它们以按年份对它们进行排序。当我的 for 循环完成时,所有值都是 2018 年数据集中的值。我的代码有什么问题?
from urllib.request import urlopen
from bs4 import BeautifulSoup
from lxml import etree
values = {}
values_by_year = {}
counter = 2013
dict_index = 0
temp = ''
url = "https://www.msn.com/en-us/money/stockdetails/financials/nas-googl/fi-a1u3rw?symbol=GOOGL&form=PRFIHQ"
tree = etree.HTML(urlopen(url).read())
for section in tree.xpath('//*[@id="table-content-area"]'):
for i in range(2, 32):
for x in section.xpath('./div/div/div[1]/div/ul[%s]/li[1]/p/text()'
% (i)):
if i == 6:
values[i] = 0
else:
values[x] = 0
for x in range(2015, 2019):
values_by_year[x] = values
for section in tree.xpath('//*[@id="table-content-area"]'):
for i in range(2, 32):
for y in range(1, 6):
for value in section.xpath(
'./div/div/div[1]/div/ul[%s]/li[%s]/p/text()' % (i,y)):
if y == 1:
temp = value
else:
print("value is ", counter+y, "y is ", y)
values_by_year[counter+y][temp] = value
print(values_by_year[2016])
print("\n------\n")
print(values_by_year[2017])
我没有收到任何错误消息。我的预期结果是程序输出一个字典名称 values_by_year ,其中包含每年的 4 个键。每一年都包含对应于年份的值的字典。例如,2015 年的“期间结束日期”为 2015 年 12 月 31 日,而 2016 年的“期间结束日期”为 2016 年 12 月 31 日。
【问题讨论】:
-
您好,您应该在网上搜索如何调试代码。尝试打印代码正在做什么以获得一些见解。
-
我已经将打印语句放在各处,以查看我的代码在做什么,它似乎在做正确的事情,但我最终用一本字典覆盖了其余的值。
标签: python python-3.x beautifulsoup lxml urllib