首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python不处理请求的POST响应

Python不处理请求的POST响应
EN

Stack Overflow用户
提问于 2019-05-30 13:13:29
回答 1查看 70关注 0票数 0

我正在使用Python从网站中提取数据,我遇到了一个奇怪的问题。

我使用re和来自post请求的响应来提取一些表数据,如下所示:

代码语言:javascript
运行
复制
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)

然而,这并没有写任何东西!我已经测试了regex,当我直接在响应数据(从浏览器复制)上使用它时,它运行得很好。

更奇怪的是,这段代码也能正常工作:

代码语言:javascript
运行
复制
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)

这对我来说毫无意义。我所做的就是将数据保存到一个文件中,然后只读取它。这与直接使用数据有什么不同?

提前谢谢。

编辑:哦,这里有一个表格数据的例子,如果它有帮助的话,我会尝试提取它:

代码语言:javascript
运行
复制
<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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-30 13:47:52

如果您试图提取/解析html,那么BeautifulSoup就是最好的选择。在这种情况下,您有<table>标记。

代码语言:javascript
运行
复制
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>标记存储元素列表。然后,只需按索引选择所需的表,或者只需迭代元素列表并打印出来,将其写入文件,就可以使用它做您想做的事情:

代码语言:javascript
运行
复制
import pandas as pd
from bs4 import BeautifulSoup

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

tables = soup.find_all('table')


for table in tables:
    print (table)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56379065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档