【问题标题】:Scraping a dynamic data-table in python through AJAX request通过AJAX请求在python中抓取动态数据表
【发布时间】:2020-06-28 08:18:12
【问题描述】:

我想在 python 中实现一个演示后端脚本,以便通过 URL 抓取文档路径列表。如果我尝试使用 urllib.request 处理基本请求,它不会返回数据表的内容。它只是返回一个空内容,如下所示。因此,在这种情况下,可能会使用 AJAX 请求捕获数据表的内容。示例代码取自实际网站的主页(实际页面)。我认为这里的主要问题可能是象征性的。如何处理 python 端以捕获动态数据表的内容?

我在python端写的代码(Current python code)无法处理这个请求,返回“页面因不活动而过期。”

有什么建议、方向吗?

当前python代码:

from requests import Session
session = Session()
session.head("mainpage")
response = session.post(
    url= 'apiurl/getviewdatatable',
    data= {
        'name' : 'name',
        'documentPath' : 'documentPath',
    }           
)

print(response.text)

实际页面:主页

<script>
        $(document).ready(function () {
            $('#posts').DataTable({
                "processing": true,
                "serverSide": true,
                "ajax": {
                    "url": "apiurl/getviewdatatable",
                    "dataType": "json",
                    "type": "POST",
                    "data": {
                        _token: "5uC8cmrJRYnn2gB4TCU9EFj0wjgA8BtmqqO64Uk1",
                    }
                },
                "columns": [
                                            {
                        "data": "name"
                    },
                                        {
                        "data": "documentPath"
                    },

                ],
                'createdRow': function (row, data, index) {
                    //
                    // if the second column cell is blank apply special formatting
                    //
                    $(row).addClass('table-row');

                },
                "language": {
                    "url": "//cdn.datatables.net/plug-ins/9dcbecd42ad/i18n/Turkish.json"
                },
                "rowReorder":{
                    selector:'td:nth-child(2)'
                },
            });
        });
</script>

【问题讨论】:

    标签: python json ajax web-scraping datatable


    【解决方案1】:

    您的 python 发布请求参数有问题。

    首先让我解释一下实际页面在做什么。 有一个表格组件是datatables 库的一部分。

    在这个页面中,数据表被一个 ajax 源填充。 ajax 调用由数据表库内部脚本处理。 您可以在此链接https://datatables.net/examples/ajax/objects.html看到数据表的ajax源示例页面

    但是这里在你的代码中 ajax 调用更详细。但即使这样,您也可以根据上面链接中的示例了解 columns 不是 ajax 调用的参数。 这里是POST ajax调用的参数部分

    "data": {
        _token: "5uC8cmrJRYnn2gB4TCU9EFj0wjgA8BtmqqO64Uk1",
     }
    

    因此,当您向此 apiurl 发送 post 请求时,您必须发送与要抓取的页面相同的 post 请求

    这是使用 python 的正确发布请求:

    from requests import Session
    session = Session()
    session.head("mainpage")
    response = session.post(
        url= 'apiurl/getviewdatatable',
        data= {
            '_token' : '5uC8cmrJRYnn2gB4TCU9EFj0wjgA8BtmqqO64Uk1'
        }           
    )
    
    print(response.text)
    

    【讨论】:

      猜你喜欢
      • 2021-10-02
      • 2021-03-24
      • 2021-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-06
      • 2020-05-08
      • 2016-03-28
      相关资源
      最近更新 更多