我无法让切片正常工作。我有一个如下所示的字符串列表:
['subdomain', 'name', 'url']
['https://www.pedidosya.com.ar/restaurantes/buenos-aires/recoleta/empanadas-delivery?bt=RESTAURANT&page=1', 'Cümen-Cümen Empanadas Palermo', 'https://www.pedidosya.com.ar/restaurantes/buenos-aires/cumen-cumen-empanadas-palermo-menu']
['https://www.pedidosya.com.ar/restaurantes/buenos-aires/recoleta/empanadas-delivery?bt=RESTAURANT&page=1', 'Cümen-Cümen Empanadas - Barrio Norte', 'https://www.pedidosya.com.ar/restaurantes/buenos-aires/cumen-cumen-empanadas-barrio-norte-menu']
我需要的是将“url”保存在新列表中以进一步处理它。
这就是我正在尝试的
for row[3:3] in reader:
menus = []
menus.append[row]
但这就是我 print() 时得到的结果:
['https://www.pedidosya.com.ar/restaurantes/buenos-aires/recoleta/empanadas-delivery?bt=RESTAURANT&page=5', 'La Pergola - Recoleta', 'https://www.pedidosya.com.ar/restaurantes/buenos-aires/la-pergola-recoleta-menu']
这是列表的最后一部分。 我需要的是:
menus = ['https://www.pedidosya.com.ar/restaurantes/buenos-aires/cumen-cumen-empanadas-palermo-menu', 'https://www.pedidosya.com.ar/restaurantes/buenos-aires/cumen-cumen-empanadas-barrio-norte-menu']
我已经添加了其余的代码。问题是它不是我想象的 str 列表,而是 type() = '_csv.reader'
完整代码如下:
urls = ["https://www.pedidosya.com.ar/restaurantes/buenos-aires/recoleta/empanadas-delivery",]
with open("output1.csv", 'w', newline='') as csvfile:
writer = csv.writer(csvfile, delimiter=',')
writer.writerow(['subdomain', 'name', 'url'])
for url in urls:
base = url+ "?bt=RESTAURANT&page="
page = 1
restaurants = []
while True:
soup = bs(requests.get(base + str(page)).text, "html.parser")
sections = soup.find_all("section", attrs={"class": "restaurantData"})
if not sections: break
for section in sections:
for elem in section.find_all("a", href=True, attrs={"class": "arrivalName"}):
restaurants.append({"name": elem.text, "url": elem["href"],})
writer.writerow([base+str(page),elem.text,elem["href"]])
page += 1
#reading
file = open("output1.csv", 'r')
reader = csv.reader(file)
最佳答案
假设您有一个列表列表(即列表周围有一个额外的 []
),而不是您的问题所暗示的 3 个独立列表,您可以循环遍历列表列表并获取 url
每个(元素 2)中的元素附加到新列表。
reader = csvreader or whatever you do to define it
menu = []
for n, i in enumerate(reader):
if(n != 0):
print(i[2])
menu.append(i[2])
我已更改代码以使用 csvreader 对象。我们将使用 enumerate
而不是我忽略第一个元素的旧方法。一个奇妙的函数,可以将我们所处的读者元素计算为 n
。那么只要n
不为零我们将像以前一样继续。
关于python - 在 Python 中对 str 列表进行切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56009257/