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

How to get Previous Element with 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 尝试了一些东西,但没有弄明白。我如何遍历所有 previous\next 价格?

谢谢。

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

您应该将之前的价格保存在 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 等。

“pubdebt”:CA,“publeaseroject”:145,“highmetalprice”:110200, “pubdebt”:DB,“publeaseroject”:145,“highmetalprice”:110200, “pubdebt”:AZ,“publeaseroject”:145,“highmetalprice”:130200, “pubdebt”:CA,“publeaseroject”:145,“highmetalprice”:150200, “pubdebt”:DB,“publeaseroject”:145,“highmetalprice”:180200, “pubdebt”:AZ,“publeaseroject”:145,“highmetalprice”:120200, “pubdebt”:CA,“publeaseroject”:145,“highmetalprice”:110200, “pubdebt”:DB,“publeaseroject”:145,“highmetalprice”:110200, “pubdebt”:AZ,“publeaseroject”:145,“highmetalprice”:130200, “pubdebt”:CA,“publeaseroject”:145,“highmetalprice”:150200, “pubdebt”:DB,“publeaseroject”:145,“highmetalprice”:180200, “pubdebt”:AZ,“publeaseroject”:145,“highmetalprice”:120200, “pubdebt”:CA,“publeaseroject”:145,“highmetalprice”:110200, “pubdebt”:DB,“publeaseroject”:145,“highmetalprice”:110200, “pubdebt”:AZ,“publeaseroject”:145,“highmetalprice”:130200, “pubdebt”:CA,“publeaseroject”:145,“highmetalprice”:150200, “pubdebt”:DB,“publeaseroject”:145,“highmetalprice”:180200, “pubdebt”:AZ,“publeaseroject”:145,“highmetalprice”:120200,

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

汤 = 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**+1**]['highmetalprice']


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

有什么建议吗?我想我很接近了。我只是不了解 BeautifulSoup 4。