Я пытаюсь очистить несколько веб-сайтов с одинаковой HTML-структурой и записать содержимое в файл JSON. Результаты для каждого URL-адреса распечатываются в терминале, но в файл JSON записывается только содержимое из последнего указанного URL-адреса. Я не смог найти решение. Вот мой код
from urllib.request import urlopen from bs4 import BeautifulSoup as soup import json urls = ['https://scholarworks.gvsu.edu/books/', 'https://pdxscholar.library.pdx.edu/pdxopen/', 'https://oer.galileo.usg.edu/all-textbooks/index.html', 'https://oer.galileo.usg.edu/all-textbooks/index.2.html', 'https://digitalcommons.trinity.edu/textbooks/'] #scrape elements for url in urls: uClient = urlopen(url) page_html = uClient.read() uClient.close() page_soup = soup(page_html, "html.parser") containers = page_soup.findAll("div",{"class":"content_block"}) source = page_soup.find("div",{"id":"series-header"}) data = [] for container in containers: item = {} item['type'] = "Textbook" item['title'] = container.h2.text item['author'] = container.p.text item['link'] = container.a["href"] item['source'] = source.h2.text data.append(item) # add the item to the list print(container.h2.text) with open("./json/multiple.json", "w") as writeJSON: json.dump(data, writeJSON, ensure_ascii=False)
Вы заново инициализируете data с каждым URL. Я думаю, что вы хотите поместить инициализацию выше вашего внешнего цикла:
data
data = [] #scrape elements for url in urls: # Etc.