Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在一个函数中将多个元素拖放并保存到列表中_Python_List_Dictionary_Web Scraping - Fatal编程技术网

Python 在一个函数中将多个元素拖放并保存到列表中

Python 在一个函数中将多个元素拖放并保存到列表中,python,list,dictionary,web-scraping,Python,List,Dictionary,Web Scraping,我正在尝试创建一个整洁的数组来存储以下键值对: 卡菲娜:“刮掉的名字” CafeadAddress:“临时地址” CAFEDEDescription:“粗略描述” 我已经编写了代码,当作为单独的函数运行时,可以刮除这些元素中的每一个(因此每个函数刮除一个元素=3个函数)。但现在,我正试图通过使用一个函数来减少重复的次数,该函数将所有3个内容都删除,然后将它们附加到一个列表中 现在,当我尝试使用下面的代码时,它只返回描述,这是cafes\u container=soup\u cafes.findA

我正在尝试创建一个整洁的数组来存储以下键值对:

  • 卡菲娜:“刮掉的名字”
  • CafeadAddress:“临时地址”
  • CAFEDEDescription:“粗略描述”
  • 我已经编写了代码,当作为单独的函数运行时,可以刮除这些元素中的每一个(因此每个函数刮除一个元素=3个函数)。但现在,我正试图通过使用一个函数来减少重复的次数,该函数将所有3个内容都删除,然后将它们附加到一个列表中

    现在,当我尝试使用下面的代码时,它只返回描述,这是
    cafes\u container=soup\u cafes.findAll(attrs={“class”:“场馆标题”、“class”:“地址内容”、“class”:“场馆描述”})
    脚本行中的最后一个元素

    整个代码块如下所示:

    def cafes():
        url = 'https://www.broadsheet.com.au/melbourne/guides/best-cafes-thornbury'
        response = requests.get(url, timeout=5)
    
        soup_cafes = BeautifulSoup(response.content, "html.parser")
        type(soup_cafes)
    
        cafes_container = soup_cafes.findAll(attrs={"class": "venue-title", "class": "address-content", "class": "venue-description"})
        
        cafes = []
        for container in cafes_container:
            cafes.append(container.text)
    
        return(cafes)
    
    字典<代码>{“类”:“场馆标题”,“类”:“地址内容”,“类”:“场馆描述”}相当于<代码>{“类”:“场馆描述”}。这并不奇怪,因为字典的全部目的就是要有唯一的键。每个文字定义只覆盖上一个值。事实上,你观察到了这种行为

    您可以通过在字典中反复设置值来利用这一点:

    cafe_classes = ["venue-title", "address-content", "venue-description"]
    
    cafes = []
    for cafe_class in cafe_classes:
        cafes.append(soup_cafes.find(attrs={"class": cafe_class}).text)
    
    此时,理解可能更容易阅读和书写:

    cafe_classes = ["venue-title", "address-content", "venue-description"]
    cafes = [soup_cafes.find(attrs={"class": c}).text for c in cafe_classes]
    

    虽然是合法的,但字典
    {“class”:“场馆标题”、“class”:“地址内容”、“class”:“场馆描述”}
    相当于
    {“class”:“场馆描述”}
    。为什么这让你感到惊讶?你认为字典做了什么?而且,这里没有数组。这些是列表,是的,python中存在语义差异。感谢您花时间提供帮助。我很感激。.text似乎给我带来了一个问题,结果是:
    AttributeError:ResultSet对象没有属性“text”。您可能将元素列表视为单个元素。当您打算调用find()时,是否调用了find_all()?
    @dedant88。嗯,是吗?我已经用了find。对我来说似乎是合理的do@deadant88. 不客气。向上投票是最好的表达方式。