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