如何遍历所有项目,然后将它们保存在字典键中

2024-09-29 17:21:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我想从网站自动加载代码。 我有一个名单,上面有一些名字,我想把每一项都查一遍。浏览第一个项目,提出请求,打开网站,从HTML(span中的文本)复制代码/数字,然后将结果保存在字典中,等等(对于所有项目)。你知道吗

我从csv读取所有行并将它们保存到一个列表中。 在这之后,我请求从一个网站加载HTML,搜索公司并读取span中的数字。你知道吗

我的代码:

with open(test_f, 'r') as file:
rows = csv.reader(file,
                  delimiter=',',
                  quotechar='"')
data = [data for data in rows]
print(data)
url_part1 = "http://www.monetas.ch/htm/651/de/Firmen-Suchresultate.htm?Firmensuche="
url_enter_company = [data for data in rows]
url_last_part = "&CompanySearchSubmit=1"

firma_noga = []
for data in firma_noga:
    search_noga = url_part1 + url_enter_company + url_last_part
    r = requests.get(search_noga)
    soup = BeautifulSoup(r.content, 'html.parser')
    lii = soup.find_all("span")

    # print all numbers that are in a span
    numbers = [d.text for d in lii]
    print("NOGA Codes: ")

我想在dictionary中得到结果,其中键应该是公司名称(列表中的项),值应该是我从span中读取的数字:

dict = {"firma1": "620100", "firma2": "262000, 465101"}

有人能帮我吗,我对网页抓取和python还不熟悉,不知道自己做错了什么。你知道吗


Tags: csv项目代码inurl列表fordata
2条回答

根据我在评论中的要求,我认为这样的东西应该适合你:

firma_noga = ['firma1', 'firma2', 'firma3'] #NOT EMPTY as in your code!
res_dict = {}
for data in firma_noga:
    search_noga = url_part1 + url_enter_company + url_last_part
    r = requests.get(search_noga)
    soup = BeautifulSoup(r.content, 'html.parser')
    lii = soup.find_all("span")
    for l in lii:
        if data not in res_dict:
            res_dict[data] = [l]
        else:
            res_dict[data].append(l)

显然,如果firma-noga不像代码中那样是空的,那么这将很明显地起作用;并且所有剩余的(您的)解析逻辑也应该是有效的。你知道吗

使用正则表达式拆分字符串,并根据是否为数字来执行操作:

import re
for partial in re.split('([0-9]+)', myString):
    try:
        print(int(partial))
    except:
        print(partial + ' is not a number')

编辑:

嗯,myString应该是一个字符串。 要将跨距的文本内容作为字符串获取,您应该能够使用.text类似这样的方法:

spans = soup.find_all('span')
for span in spans:
    myString = span.text      #
    for partial in re.split('([0-9]+)', myString):
        try:
            print(int(partial))
        except:
            print(partial + ' is not a number')

相关问题 更多 >

    热门问题