如何使用BeautifulSoup获取上一个元素



我已经用BeautifulSoup html解析器在数据库上写了一段时间了。我只有一个价格,我想在未来的循环中使用这个价格。有人能帮忙吗?我将永远心存感激!我正在尝试存储一些从网站上抓取的数据;以下是我的python代码:

soup = BeautifulSoup(html, 'html.parser')
site_json=json.loads(soup.text)
for i in range(len(site_json)):
pubdebt = site_json[i]['pubdebt']
publease = site_json[i]['publeaseroject']
highmetalprice = site_json[i]['highmetalprice']

try:
Job.objects.create(
pubdebt=pubdebt,
publeaseroject=publeaseroject,
highmetalprice=highmetalprice,

在下面的代码中,我尝试使用以前的低值。每条线都引用了第二天,比如1-1-2020,1-02-2020-01-03-2020-01-04-2020,我的数据就像

"pubdebt":CA,"publeaseroject":145,"highmetalprice":110200,
"pubdebt":CA,"publeaseroject":145,"highmetalprice":130200,
"pubdebt":CA,"publeaseroject":145,"highmetalprice":150200,
"pubdebt":CA,"publeaseroject":145,"highmetalprice":180200,
"pubdebt":CA,"publeaseroject":145,"highmetalprice":120200,

我的期望是进入每个循环:

Pubdebt: Ca  (sticky value)
Publeaseproject:145 (sticky value)
highmetalprice:  110200  (first highmetalopenprice value)
HIGHMETALCLOSE: .... (it may blank because we have just one price for beggining day)

第二个循环类似于:

Pubdebt: Ca  (sticky value)
Publeaseproject:145 (sticky value)
Highmetalopen:  110200  ( previous highmetalprice value)
HIGHMETALCLOSE: 130200 (current highmetalprice value)

第三个循环:

Pubdebt: Ca  (current value)
Publeaseproject:145 (sticky value)
Highmetalopen:  130200  ( previous highmetalprice value)
HIGHMETALCLOSE: 150200 (current highmetalprice value)

和第四类:

Pubdebt: Ca  (sticky value) 
Publeaseproject:145 (sticky value)
Highmetalopen:  150200  ( previous highmetalopenprice value )
HIGHMETALCLOSE: 180200 ( current highmetalopenprice value )

我用find_previous尝试了一些东西,但没有成功。如何循环浏览上一个\下一个价格?

谢谢。

您应该在loop之外的变量中保留以前的价格,并将其与当前价格循环使用。在循环结束时,您应该将当前价格作为上一个价格,以便在下一个循环中使用。

类似于这个的东西

previous_price = ''
for item in site_json:
pubdebt = item['pubdebt']
publease = item['publeaseroject']
highmetalprice = item['highmetalprice']

print('price current:', highmetalprice)
print('price previous:', previous_price)

# ... work with both prices ...

# assign current to previous for next loop
previous_price = highmetalprice

尝试在列表外创建一个变量,并将这些价格放入该变量

我清楚地理解您的代码,但我的扩展代码是这样的。我的api查询有很多变量,比如CA、DB、AZ、FL、NY等等

"公共债务":CA;publeaseproject":145;highmetalprice":110200,"公共债务":DB;publeaseproject":145;highmetalprice":110200,"公共债务":AZ;publeaseproject":145;highmetalprice":130200,"公共债务":CA;publeaseproject":145;highmetalprice":150200,"公共债务":DB;publeaseproject":145;highmetalprice":180200,"公共债务":AZ;publeaseproject":145;highmetalprice":120200,"公共债务":CA;publeaseproject":145;highmetalprice":110200,"公共债务":DB;publeaseproject":145;highmetalprice":110200,"公共债务":AZ;publeaseproject":145;highmetalprice":130200,"公共债务":CA;publeaseproject":145;highmetalprice":150200,"公共债务":DB;publeaseproject":145;highmetalprice":180200,"公共债务":AZ;publeaseproject":145;highmetalprice":120200,"公共债务":CA;publeaseproject":145;highmetalprice":110200,"公共债务":DB;publeaseproject":145;highmetalprice":110200,"公共债务":AZ;publeaseproject":145;highmetalprice":130200,"公共债务":CA;publeaseproject":145;highmetalprice":150200,"公共债务":DB;publeaseproject":145;highmetalprice":180200,"公共债务":AZ;publeaseproject":145;highmetalprice":120200,

使用多变量会有点困难。我想用开盘价和收盘价来存储所有的价值。我还尝试了在循环中添加+1,比如:

汤=BeautifulSoup(html,'html.parser'(site_json=json.loads(汤.文本(

for i in range(len(site_json)):
pubdebt = site_json[i]['pubdebt']
publease = site_json[i]['publeaseroject']
highmetalprice = site_json[i**+1**]['highmetalprice']

try:
Job.objects.create(
pubdebt=pubdebt,
publeaseroject=publeaseroject,
highmetalprice=highmetalprice,

有什么建议吗?我想我已经接近了。我只是还不知道BeautifulSoup 4。

最新更新