繁体   English   中英

Python,使用嵌入式 java 脚本在网站中进行网页抓取

[英]Python, webscraping in website with embedded java script

我正在抓取一个网站。

在这些代码行之后:

from bs4 import BeautifulSoup as soup

parse_soup = soup(r.text, 'html.parser')

我得到一些 html 并在底部:

<script type="text/javascript">
            
            window.ContextPath = "/BOBIBOBI/Public/";
            
        window.ControllerName = "Pubblicazioni";
        window.ActionName = "Index";
        window.LoginUrl = "/BOBIBOBI/Account/Login";
        window.Locale = "it";
    </script>
<script src="/BOBIBOBI/Bundles/all?v=x1x2x3x4x5x6x"></script>
<script type="text/javascript">
        $("#table").DataTable({
            order: [],
            dom: "<'row actions'<'col-sm-6'l><'col-sm-6'<'pull-right input-group input-group-sm'f<'input-group-btn insert'>>>><'row'<'col-sm-12 table-wrapper'tr>><'row'<'col-sm-4'i><'col-sm-4 text-center'><'col-sm-4'p>>",
            drawCallback: function (settings) {
                var csrf = $("form.filter [name='__RequestVerificationToken']");
                $(".postlink-download").each(function () {
                    var params = $(this).data("params");
                    if (params) {
                        params[csrf.attr("name")] = csrf.val();
                    }
                });
            }
        }).on("beforeDetailInline", function (e, tr, data) {
            $("#filter_Titolo_").val($(data[0]).data("value"));
            $("#filter_Id_").val($(data[3]).data("value"));
            $("#filter_ExtKey_").val($(data[4]).data("value"));
            $("#filter_TipoPubblicazione_").val($(data[5]).data("value"));
            $("#filter_SheetName_").val($(data[8]).data("value"));
            $("#modalTitleDetails").text("BOBIBOBI " + data[7]);
            $("#detail-date").text(tr.find("td:eq(1)").text());

            $.ajax({
                type: "POST",
                data: $("form.filter").serialize(),
                url: "/BOBIBOBI/Public/Pubblicazioni/Detail",
                success: function (data, textStatus) {
                    $("#divDetails").html(data);
                    $("#tableDetails").DataTable({
                        order: [],
                        dom: "<'row'<'col-sm-12 table-wrapper'tr>><'row'<'col-sm-4'i><'col-sm-4 text-center'B><'col-sm-4'p>>"
                    });
                    $("#modalDetails").modal("show");
                }
            });
        }).on("beforeCreateActionUrl", function (e, tr, data, className) {
            if (className === "detail-download") {
                return "/BOBIBOBI/Public/Pubblicazioni/ExportDetails";
            }
        });
    </script>
</body>
</html>

我需要刮掉网站中包含的表格,身份验证工作正常。 我不习惯 java 和 python。

我想从这样的请求中获取一些数据:

r = requests.post(SOURCE_URL, data=WHATDATA,  headers=HEADERS, verify=False)

我知道 source_url 和标题。 我知道表格名称及其发布日期。 我的问题是:我应该把什么放在 WHATDATA 中以便我可以写:

data_parsed = json.loads(r.content.decode("utf-8"))

并在我的表格中获取 data_parsed。希望这很清楚,否则我可以澄清更多。

谢谢

也许有点晚了,我想我在同一个网站上工作......这个解决方案对我有用,你必须使用行中的参数创建 JSON 并将其添加为属性:

var data = $('#table').DataTable().rows().data().toArray()[0];
var titolo = $(data[0]).data("value");
var id = $(data[3]).data("value");
var extkey = $(data[4]).data("value");
var tipopubb = $(data[5]).data("value");
var sheet = $(data[8]).data("value");
var idsezione = $(data[9]).data("value");
var idparent =  $(data[2]).data("pk");
var token = $("form.filter [name='__RequestVerificationToken']").val();

var params = {
    details: {
        Titolo: titolo,
        Id: id,
        ExtKey: extkey,
        TipoPubblicazione: tipopubb,
        SheetName: sheet,
        IdSezione: idsezione,
        ParentId: idparent
    },
    __RequestVerificationToken: token
};

var e = new Event('click');
var link = $('<a class="detail-download">').attr("href", "/sunset/Public/Pubblicazioni/ExportDetails").data("params", params).get(0);

submitAjax(e, link);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM