p861228 2018-10-12 01:45 采纳率: 100%
浏览 4587
已采纳

小白请教高手,python爬取数据遇到js隐藏div怎么办

请教一下,我最近想在政府房管部门网站爬取房产备案信息,地址:http://www.dyyscx.com/newhouse/house_table.aspx?id=828279

每个楼盘表下有个“查看”链接,点击后就会在原页面生成新的备案内容。

这一部分内容使用元素检查是可以看见的,但查看源代码却看不见。

使用network查看XHR发现有个文件“GetBuildTableByAjax.ashx”,这里面的preview中就有相关信息。

截取片段是这样的:

 物业类别:住宅  销售状态:抵预  建筑面积:117.260平米  总价:71.65万元' class='border-333333'>3单元&nbsp;3-25-1</td><td width='95' height='30' style='cursor:hand;cursor:point;' bgcolor='#FDDFAB' Title='物业类别:住宅  销售状态:抵预  建筑面积:89.730平米  总价:53.89万元' class='border-333333'>3单元&nbsp;3-25-2</td><td width='95' height='30' style='cursor:hand;cursor:point;' bgcolor='#FDDFAB' Title='物业类别:住宅  销售状态:抵预  建筑面积:120.870平米  总价:70.87万元' class='border-333333'>3单元

我看了下,原网页head里面有一段Scirpt,内容是这样的:

 <script type="text/javascript">
        function GetData(item, bulid) {
            var heightobj = document.body.scrollHeight;
            var widthobj = document.body.scrollWidth;
            $("div.overdiv").css("width", widthobj).css("height", heightobj).css("left", "0").css("top", "0").show();
            //获得显示的位置
            var height = document.body.scrollTop + document.documentElement.scrollTop;
            widthobj = (document.body.clientWidth - 199) / 2;
            heightobj = (document.documentElement.clientHeight - 60) / 2 + height;
            //显示该div
            $("div.select").css("left", widthobj).css("top", heightobj).show();
            $.post("GetBuildTableByAjax.ashx", { itemRecord: item, houseCode: bulid }, function (data) {

                document.getElementById("BuildTable").innerHTML = data;
                $("div.select").hide();
                $("div.overdiv").hide();
            });
        }
    </script>'

因为是小白,所以猜想是js隐藏了新内容的标签,导致不在原网页的源代码中显示,所以爬不到内容。

请教一下我猜想的是否正确,以及我要怎么才能获得备案信息的内容。

ps:最好是能贴个完整的方法,谢谢!!!!!!!!!

  • 写回答

3条回答 默认 最新

  • lyhsdy 2018-10-12 03:34
    关注

    以下是获取点击查看返回内容,测试可以完成爬取

    
    import requests
    def test():
        s=requests.session()
        headers={
            'Accept':'*/*',
            'Accept-Encoding':'gzip, deflate',
            'Accept-Language':'zh-CN,zh;q=0.9',
            'Connection':'keep-alive',
            'Content-Length':'43',
            'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8',
            'Host':'www.dyyscx.com',
            'Origin':'http://www.dyyscx.com',
            'Referer':'http://www.dyyscx.com/newhouse/house_table.aspx?id=828279',
            'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.15 Safari/537.36',
            'X-Requested-With':'XMLHttpRequest'
        }
        s.headers.update(headers)
        data={
            'itemRecord':'828279',
            'houseCode':'201506250000907',
        }
        url='http://www.dyyscx.com/newhouse/GetBuildTableByAjax.ashx'
        req=s.post(url=url,data=data).text
        print(req)
    
    test()
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥20 java在应用程序里获取不到扬声器设备
  • ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。
  • ¥60 许可证msc licensing软件报错显示已有相同版本软件,但是下一步显示无法读取日志目录。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加