Я пытаюсь удалить сайт и записать данные в CSV.Проблема в том, что, поскольку я использую вложенные циклы, и все данные не заканчиваются в CSV.
import requests
from bs4 import BeautifulSoup
from csv import writer
with open ("full_links_details.csv", 'w', newline='') as csv_file:
csv_writer = writer(csv_file)
csv_writer.writerow(["Details", "Details_Link", "image_link"])
z = """
<div class="container container1">
<ul class="splist-view">
<li class="wow fadeInUp">
<div class="row">
<div class="pic">
<a href="some_link_a">
<img src="some_image_link_a">
</a>
</div>
<div class="detail">
<ul>
<li class="hd"><a href="some_link_a">SomeTitleText-A</a></li>
</ul>
</div>
</div>
</li>
<li class="wow fadeInUp">
<div class="row">
<div class="pic">
<a href="some_link_b">
<img src="some_image_link_b">
</a>
</div>
<div class="detail">
<ul>
<li class="hd"><a href="some_link_b">SomeTitleText-B</a></li>
</ul>
</div>
</div>
</li>
</ul>
</div>
"""
souped_html_data = BeautifulSoup(z, "html.parser")
div_detail_list = souped_html_data.find_all("div", "detail")
div_pic_list = souped_html_data.find_all("div", "pic")
for div_detail in div_detail_list:
details = div_detail.get_text()
for div_link in div_detail_list:
div_link_a = div_link.find_all('a')
for div_link_href in div_link_a:
div_link_href_url = div_link_href.get('href')
for div_pic in div_pic_list:
div_pic_a = div_pic.find_all('img')
for div_pic_a_src in div_pic_a:
div_pic_a_src_link = div_pic_a_src.get('src')
csv_writer.writerow([details, div_link_href_url, div_pic_a_src_link])
Теперь, что бы я ни делал, я не могу получить все данные в правильной форме.Я имею в виду, если я изменяю отступ последней строки - иногда переменная details повторяется, иногда повторяются первые два поля.Итак, я уверен, что вложенный цикл For создает проблему.Есть ли способ вывести все циклы на один уровень и затем записать данные?Я думаю, что это решит проблему.
Решено с помощью @ Joël.Закрепил все петли как:
for div_detail, div_link, div_pic in zip(div_detail_list, div_detail_list, div_pic_list):
details = div_detail.get_text()
div_link_a = div_link.find_all('a')
for div_link_href in div_link_a:
div_link_href_url = div_link_href.get('href')
div_pic_a = div_pic.find_all('img')
for div_pic_a_src in div_pic_a:
div_pic_a_src_link = div_pic_a_src.get('src')
csv_writer.writerow([details, div_link_href_url, div_pic_a_src_link])