Как передать суповой объект в полезную нагрузку JSON, подготовленную для метода request.put в python? - PullRequest
1 голос
/ 09 июня 2019

Я пытаюсь прочитать веб-страницу с помощью модуля запросов в python, очистить прочитанные данные с помощью Beautifulsoup, изменить данные в объекте-супе и записать их обратно на ту же веб-страницу с помощью метода query.put ().

Есть ли что-то, что я должен сделать дополнительно в объекте супа, чтобы назначить его для полезной нагрузки JSON?

Модули, используемые для этой цели: 1. JSON 2. запросы 3. BeautifulSoup

Если полезная нагрузка JSON, которую я готовлю, не имеет суп-объекта, тогда запросы request.put () правильно записывают данные

  response = requests.get(confluenceServerURL+getPageURL, verify=False, headers=headers)

  # 200 OK is the response for the web page is accessible
  if response.status_code == 200:
    jsonD = response.json()
    pageId =  jsonD["results"][0]['id']
    versionNum = jsonD["results"][0]['version']['number']
    body =  jsonD["results"][0]['body']['storage']['value']
    soup = BeautifulSoup(response.content, 'html.parser')
    input_str = "test string"
    testMan = "found string"
    for row in soup.find_all('tr'):
      for node in row.find_all('td'):
        if node.text == testMan:
          node.string = input_str
    newBody = soup
  else: #response.status_code
    logger.error("Error while obtaining page with given page title %s ", response.status_code)
    exit(1);
  ## Space to write confluence page
  logger.info('--------------Updating page--------------')
  updatePageURL = "/rest/api/content/"+pageId

  jsonPayload = {"id":pageId,"type":"page","title":pageTitle,"space":{"key":spaceKey},
                 "body":{"storage":{"value":"{0}".format(newBody),"representation":"storage"}},
                 "version":{"number":int(versionNum)+1}}
  #print(jsonPayload)
  # update page
  response = requests.put(confluenceServerURL+updatePageURL,verify=False,data=json.dumps(jsonPayload),headers=headers)
  logger.debug('URL for updating page is %s', response.url)
  if response.status_code == 200:
    logger.info("Page with id %s updated successfully",pageId)
    #break;
  else:
    logger.error("Unable to update page with id %s",pageId)
    logger.error(response.text)

Я получаю код ответа как 200 для request.put () но страница остается пустой, если используется BeautifulSoup.Если он находится непосредственно в формате JSON, страница успешно обновляется

INFO: conf_rest_get_page: -------------- Получение страницы ------------------- DEBUG: conf_rest_get_page: получение SMSESSION с доступного URL-адреса DEBUG: conf_rest_get_page: URL-адрес для получения страницы слияния: URL

INFO: conf_rest_get_page: -------------- Обновление страницы ---------------- ИНФОРМАЦИЯ: conf_rest_get_page: Страница с идентификатором 261042277 успешно обновлена ​​


2019-06-09 10.26.58 ===== Завершена табличная процедура, Статус: True =====

...