Python не работает с ответом POST запросов

Я извлекаю данные с веб-сайта с помощью Python requests и столкнулся со странной проблемой.
Я использую re с ответом на мои почтовые запросы, чтобы извлечь некоторые данные таблицы, например:

import re
import requests

tables = re.compile(r'^\s*(<table width.*?table>)$', flags=re.DOTALL | re.MULTILINE)
with open(tableInfoFile, fileSaveFormat) as f:
    chartInfoPage = session.post(tableURL, headers=postLoginHeaders, data=data, verify=False)
    for table in re.findall(tables, chartInfoPage.content.decode('utf-8'), flags=re.DOTALL | re.MULTILINE):
        f.write(table)

Однако это ничего не пишет! Я уже протестировал регулярное выражение, и оно отлично работает, когда я использую его непосредственно для данных ответа (скопированных из браузера).
Что еще более странно, так это то, что этот код тоже отлично работает:

import re
import requests

tables = re.compile(r'^\s*(<table width.*?table>)$', flags=re.DOTALL | re.MULTILINE)
with open(tableInfoFile, fileSaveFormat) as f:
    chartInfoPage = session.post(tableURL, headers=postLoginHeaders, data=data, verify=False)
    with open('test.html', 'w') as temp:
        temp.write(chartInfoPage.content.decode('utf-8'))
    with open('test.html', 'r') as temp:
        data = temp.read()
    for table in re.findall(tables, data, flags=re.DOTALL | re.MULTILINE):
        f.write(table)

Это не имеет смысла для меня. Все, что я делаю, это сохраняю данные в файл, а затем просто читаю их. Чем это отличается от прямого использования данных??
Заранее спасибо.

Обновлено: О, и вот пример данных таблицы, которые я пытаюсь извлечь, если это поможет:

<table width = "100%" class = "contentTable" cellpading=3>
<tr>
<td colspan=12 class = "header">لیست دروس ارایه شده توسط دانشکده مهندسی عمران</td>
</tr>
  <tr>
    <td class = "header" ><nobr> شماره درس</nobr></td>
    <td class = "header" ><nobr>گروه</td>
    <td class = "header" ><nobr>واحد</td>
    <td class = "header" ><nobr>نام درس</td>
    <td class = "header" ><nobr>پيشنياز و همنياز</td>
    <td class = "header" ><nobr>ظرفيت</td>
    <td class = "header" ><nobr>تعداد ثبت نامی</td>
    <td class = "header" ><nobr>نام استاد</td>
    <td class = "header" ><nobr>تاريخ امتحان</td>
    <td class = "header" ><nobr>برنامه هفتگی</td>
    <td class = "header" ><nobr>ملاحظات</td>
    <td class = "header" ><nobr>پیغام به هنگام ثبت نام</td>
  </tr>

  <tr>
    <td  class = "contentCell"><nobr>10021</td>
    <td  class = "contentCell"><nobr>1</td>
    <td  class = "contentCell"><nobr>1</td>
    <td  class = "contentCell"><nobr>آز هیدرولیک</td>
    <td  class = "contentCell" width=150>پيشنياز: 13410: 13110</td>
    <td class = "contentCell"><nobr><span dir = "ltr"> 16</span></font></td>
    <td class = "contentCell" ><nobr> &nbsp;</font></td>
    <td class = "contentCell" width=150>Crossed out</font></td>
    <td  class = "contentCell"><nobr><span dir=ltr>&nbsp;&nbsp;&nbsp;</span></td>
    <td  class = "contentCell"><nobr> شنبه  8:0 تا 12:0 شنبه  13:0 تا 15:0</td>
    <td  class = "contentCell">برگزاری این درس فقط با شرط ثبت نام قطعی حداقل 15 نفر امکان پذیر است 
    </td>
    <td  class = "contentCell">برگزاری این درس فقط با شرط ثبت نام قطعی حداقل 15 نفر امکان پذیر است</td>
  </tr>
</table>
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
62
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вы пытаетесь извлечь/разобрать html, BeautifulSoup — это то, что вам нужно. В данном конкретном случае у вас есть теги <table>.

html = '''<table width = "100%" class = "contentTable" cellpading=3>
<tr>
<td colspan=12 class = "header">لیست دروس ارایه شده توسط دانشکده مهندسی عمران</td>
</tr>
  <tr>
    <td class = "header" ><nobr> شماره درس</nobr></td>
    <td class = "header" ><nobr>گروه</td>
    <td class = "header" ><nobr>واحد</td>
    <td class = "header" ><nobr>نام درس</td>
    <td class = "header" ><nobr>پيشنياز و همنياز</td>
    <td class = "header" ><nobr>ظرفيت</td>
    <td class = "header" ><nobr>تعداد ثبت نامی</td>
    <td class = "header" ><nobr>نام استاد</td>
    <td class = "header" ><nobr>تاريخ امتحان</td>
    <td class = "header" ><nobr>برنامه هفتگی</td>
    <td class = "header" ><nobr>ملاحظات</td>
    <td class = "header" ><nobr>پیغام به هنگام ثبت نام</td>
  </tr>

  <tr>
    <td  class = "contentCell"><nobr>10021</td>
    <td  class = "contentCell"><nobr>1</td>
    <td  class = "contentCell"><nobr>1</td>
    <td  class = "contentCell"><nobr>آز هیدرولیک</td>
    <td  class = "contentCell" width=150>پيشنياز: 13410: 13110</td>
    <td class = "contentCell"><nobr><span dir = "ltr"> 16</span></font></td>
    <td class = "contentCell" ><nobr> &nbsp;</font></td>
    <td class = "contentCell" width=150>Crossed out</font></td>
    <td  class = "contentCell"><nobr><span dir=ltr>&nbsp;&nbsp;&nbsp;</span></td>
    <td  class = "contentCell"><nobr> شنبه  8:0 تا 12:0 شنبه  13:0 تا 15:0</td>
    <td  class = "contentCell">برگزاری این درس فقط با شرط ثبت نام قطعی حداقل 15 نفر امکان پذیر است 
    </td>
    <td  class = "contentCell">برگزاری این درس فقط با شرط ثبت نام قطعی حداقل 15 نفر امکان پذیر است</td>
  </tr>
</table>'''

.find_all('table') будет хранить список элементов с тегом <table>. Затем нужно просто выбрать нужную таблицу по индексу или просто перебрать список элементов и распечатать его, записать в файл и сделать с ним все, что хотите:

import pandas as pd
from bs4 import BeautifulSoup

soup = BeautifulSoup(html, 'html.parser')

tables = soup.find_all('table')


for table in tables:
    print (table)

ну, я на самом деле не хочу извлекать данные, я просто хочу сохранить данные непосредственно в файл html и загрузить его на веб-сайт. re с ним сделать это намного проще.

Xosrov 30.05.2019 16:09

ах, хорошо, как я уже говорил ранее, просто используйте красивый суп, чтобы вытащить элементы тега <table>. Я обновил решение.

chitown88 30.05.2019 16:15

В итоге я сделал именно это, оказалось, что использование re с ^ и регулярными выражениями $ не работает с ответами на сообщения. Всем, кто не хочет использовать BeautifulSoup, я предлагаю просто найти способ удалить эти 2 символа в их регулярном выражении.

Xosrov 30.05.2019 16:23

Другие вопросы по теме