有关请求和BS4的两个问题

时间:2018-12-25 22:39:37

标签: python python-3.x beautifulsoup python-requests

import requests    
from bs4 import BeautifulSoup    
import time    
import sys

url = "https://www.doviz.com/"    
response = requests.get(url)    
html_icerigi = response.content    
soup = BeautifulSoup(html_icerigi,"html.parser")    
isimler = soup.find_all("span",{"class":"menu-row1"})    
degerler = soup.find_all("span",{"class":"menu-row2"})    
islem = input("Lütfen işleminizi giriniz...")    
time.sleep(1)

for isim,deger in zip(isimler,degerler):    
    isim = isim.text    
    deger = deger.text    
    isim = isim.strip()    
    deger = deger.strip()    
    isim = isim.replace("\n","")    
    deger = deger.replace("\n","")    
    print(isim,deger)

    while True:    
        if islem == "q" or islem == "Q":    
            print("Programdan çıkılıyor...")    
        time.sleep(1)    
        elif islem == "1":   
            print("1 Gr Altın = {} TLdir.".format(deger[0]))

我的问题是:

  1. 当我由于for循环内的while循环而运行此代码时,其输出如下:

1 GrAltın= 2 TLdir。 1 GrAltın= 2 TLdir。

连续。我该如何避免呢?

  1. deger[0]仅返回黄金克实际值的第一位。我要的全部是216,370美元。

顺便说一下,我是Python的绝对初学者。

最好的问候。

1 个答案:

答案 0 :(得分:0)

我认为不需要while True:循环。删除将摆脱问题#1

类似地,看起来您正在索引deger字符串。字符串的0索引是它的第一个字母。删除索引将返回整个值。

编辑: 从您的评论看来,您正在尝试创建一个列表,您可以对其进行索引以提取该索引的特定值。为此,您需要列出这些值。

look_up = []
for isim,deger in zip(isimler,degerler):
    isim = isim.text
    deger = deger.text
    isim = isim.strip()
    deger = deger.strip()
    isim = isim.replace("\n","")
    deger = deger.replace("\n","")
    look_up.append(isim + "\t" + deger)
    print(isim,deger)

# dedent to remove from `for` loop
if islem == "q" or islem == "Q":
    print("Programdan çıkılıyor...")
    time.sleep(1)
else:
    print("1 Gr Altın = {} TLdir.".format(look_up[int(islem)]))

注意:这将仅允许一次查找。如果要允许它进行多个查找,则需要建立一个哨兵循环,该循环将一直持续到按下"q"为止。

此外,使用字典look_up = {}并通过look_up[isim] = deger填充字典可能会更好。这样,您就可以通过isim值查找信息。即DOLAREURO

我希望这是足够的信息,可以帮助您找到想要去的地方。我相信您可以使用此处提供的信息来解决您的特定用例。