У меня есть скребок, который очищает страницу для продуктов. Каждый контейнер настроен одинаково, но они сгруппированы в несколько разных s. Я могу написать код и циклы для каждого класса контейнеров, но я подумал, что было бы яснее написать для всех из них онлайн. Возможно ли это?
HTML-код для каждого из четырех классов идентичен, за исключением имени класса и текста, который я собираю. Это выглядит так:
<tr class="product">
<td>
</td>
<td>
<a href="LINK">COMPANY NAME
</td>
<td data-order="PRODUCT NUMBER">
<div class="productnum">PRODUCT NUMBER</div>
<img src="BRAND LOGO">
</td>
<td>
CATEGORIES TEXT
</td>
Затем будет следующий класс:
<tr class="productGold">
<td>
</td>
<td>
<a href="LINK">COMPANY NAME
</td>
<td data-order="PRODUCT NUMBER">
<div class="productnum">PRODUCT NUMBER</div>
<img src="BRAND LOGO">
</td>
<td>
CATEGORIES TEXT
</td>
... и т. Д.
В настоящее время я использую следующую строку кода, чтобы получить все продукты определенного класса:
containers = page_soup.findAll("tr",{"class":"productGold"})
Затем я пишу цикл и экспортирую его в CSV. Затем я повторяю для каждого из четырех классов:
{"class":"productGold"}), {"class":"productSilver"}), "
{"class":"productBronze"}), and {"class":"product"})
Могу ли я написать одну строку кода, которая найдет все продукты во всех классах, а затем перебирает страницу один раз в отличие от:
containers = page_soup.findAll("tr",{"class":"productGold"})
product_names = []
product_numbers = []
categories = []
with open('My-File.csv','w') as f:
csv_out = csv.writer(f)
for container in containers:
product_name = container.a.text
product_number = container.div.text
category = container.select_one('td:nth-of-type(4)').text.strip()
product_names.append(product_name)
proudct_numbers.append(product_number)
categories.append(category)
csv_out.writerow([product_name, product_number, category])
Тогда:
containers = page_soup.findAll("tr",{"class":"productSilver"})
product_names = []
product_numbers = []
categories = []
with open('My-File_1.csv','w') as f:
csv_out = csv.writer(f)
for container in containers:
product_name = container.a.text
product_number = container.div.text
category = container.select_one('td:nth-of-type(4)').text.strip()
product_names.append(product_name)
proudct_numbers.append(product_number)
categories.append(category)
csv_out.writerow([product_name, product_number, category])
Тогда то же самое для {"class":"productBronze"}) and {"class":"product"})
?
Я думаю, что могу сделать это в этой строке:
containers = page_soup.findAll("tr",{"class":"productGold"})
но я не заставляю это работать. Любая помощь будет принята с благодарностью.