Запись данных с нескольких сайтов в файл JSON BeautifulSoup - PullRequest
0 голосов
/ 28 апреля 2018

Я пытаюсь очистить несколько веб-сайтов с одинаковой 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)

1 Ответ

0 голосов
/ 28 апреля 2018

Вы заново инициализируете data с каждым URL. Я думаю, что вы хотите поместить инициализацию выше вашего внешнего цикла:

data = []
#scrape elements
for url in urls:
    # Etc.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...