Файл Json неправильно экспортируется из массива строк Python в цикле for - PullRequest
0 голосов
/ 11 июля 2019

я делаю скребок для веб-сайта, который очищает веб-сайты и ищет определенные ключевые слова на веб-сайте, и если он находит ключевое слово, он либо вызывает веб-сайт на продуктивный, либо непродуктивный, а затем экспортирует эту информацию в файл json, поэтому яможно получить с помощью c # позже, но проблема в том, что метод экспорта json не экспортируется правильно, и я новичок и в pyhton, и в json.

я пробовал все, и каждый синтаксис существует, но, похоже, ничего не работаеткак я хочу, чтобы это было.

это мой код Python

from bs4 import BeautifulSoup
import requests
import json
import os
import pandas as pd
import numpy as np

# this scraps the websites that i give it
def scrap_website():

    pages = ['https://www.youtube.com/watch?v=tHI2NIaNrGk',
            'https://aljazeera.com', 'https://www.svt.se']

    for site in pages:
        page = requests.get(site)
        soup = BeautifulSoup(page.content, 'html.parser')

        if 'Game' in soup.getText():
            is_productive = False
            json_map = {}
            json_map["websiteLink"] = site
            json_map["isProductive"] = is_productive
            json_text = json.dumps(json_map)

        else:
            is_productive = True

            json_map = {}
            json_map["websiteLink"] = site
            json_map["isProductive"] = is_productive
            json_text = json.dumps(json_map)

        data = []
        data.append(json_text)
        with open('data\\data.json', 'a') as json_file:
             json.dump(data, json_file, indent=2, separators=(
                 ", ", "  "), sort_keys=True)


scrap_website()

это код JSON, который я получаю

[
  "{\"websiteLink\": \"https://www.youtube.com/watch?v=tHI2NIaNrGk\", \"isProductive\": false}"
][
  "{\"websiteLink\": \"https://aljazeera.com\", \"isProductive\": true}"
][
  "{\"websiteLink\": \"https://www.svt.se\", \"isProductive\": true}"
]

1 Ответ

0 голосов
/ 11 июля 2019

Вы можете добавить все узлы в одном и том же json, объявив массив и перейти к добавлению каждого веб-сайта как узла массива так:

Объявление массива перед циклом

json_map = []

Для каждого сайта

site_node = {}

site_node["websiteLink"] = site

site_node["isProductive"] = is_productive

json_map.append(site_node)

Наконец сохранить JSON вне цикла

with open('data.json', 'w') as outFile:

    json.dump(json_map, outFile)

После того, как вы можете загрузить массив json и зациклить его с помощью простого для

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...