Как использовать JSON для анализа веб-сайта и сохранения в текстовом файле? - PullRequest
0 голосов
/ 27 апреля 2020

Я пытаюсь создать функцию, которая может очищать сайт и анализировать его содержимое, удаляя теги и сохраняя результаты в текстовом файле .txt. Функция должна передавать заголовок, чтобы избежать ошибки 403, а также вернуть весь контент страницы (я использовал Google в качестве прокси-сервера, но намерен, чтобы это был любой сайт, который потенциально может привести к ошибке 403). Вот что У меня есть, что генерирует ошибку, которая гласит: «TypeError: не удается преобразовать str в байты»

from urllib.request import urlopen
import urllib.request
import json

def GetData(url):
    user_agent = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64)'
    headers = { 'User-Agent' : user_agent }
    response = urllib.request.Request(url, headers)
    with urllib.request.urlopen(response) as res:
        clean = re.sub(r'<.*?>', '', res)
        data = clean.read().decode("utf-8")


    return json.loads(data)

url = ("https://google.com")
#print(GetData(url))
fileName = "Data.txt"
myFile = open(fileName, 'w')
myFile.write(GetData(url))

Я был бы очень признателен, если кто-нибудь может указать мне в правильном направлении.

Вот ошибка трассировки: Traceback (последний вызов был последним): файл "JSON .py", строка 18, в печати (GetData (url)), файл "JSON .py", строка 9, в GetData с urllib.request.urlopen (ответ) в виде res: Файл "C: \ Users \ andre \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ urllib \ request.py", строка 222, в urlopen return opener.open (url, data, timeout) Файл "C: \ Users \ andre \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ urllib \ request.py", строка 525, в открытом ответе = self Файл ._open (req, data) "C: \ Users \ andre \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ urllib \ request.py", строка 543, в файле _open '_open', req) " C: \ Users \ andre \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ urllib \ request.py ", строка 503, в _call_chain result = fun c (* args) Файл" C: \ Users \ andre \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ urllib \ request.py ", строка 1362, в контексте https_open = self._context, check_hostname = self._check_hostname) Файл" C: \ Users \ andre \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ urllib \ request.py ", строка 1319, в do_open encode_chunked = req.has_header ('Transfer-encoding')) Файл" C: \ Users \ andre \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ http \ client.py ", строка 1252, в запросе self._send_request (метод, URL, тело, заголовки, encode_chunked) Файл" C: \ Users \ andre \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ http \ client.py ", строка 1298, в файле _send_request self.endheaders (body, encode_chunked = encode_chunked), файл" C: \ Users \ andre \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ http \ client.py ", строка 1247, в конечных заголовках self._send_output (message_body, encode_chunked = encode_chunked) Файл" C: \ Users \ andre \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ http \ client.py ", строка 1064, в _send_output + b '\ r \ n' Ошибка типа: невозможно преобразовать str в байты

...