当前位置: 首页 > 知识库问答 >
问题:

用Python实现动态网站的抓取

邢硕
2023-03-14

我尝试用BS4 python来抓取动态网站:

https://www.nadlan.gov.il/?search=תל אביב יפו

我试过:

from urllib.request import urlopen
from bs4 import BeautifulSoup
page = urlopen(wiki)
soup = BeautifulSoup("https://www.nadlan.gov.il/?search=תל אביב יפו")

我有两个问题:

>

<script>
    document.write("<script src='scripts/dis/bundleJS.js?v=" + globalAppVersion + "'><\/script>")
    document.write("<script id='srcGovmap' src='https://new.govmap.gov.il/govmap/api/govmap.api.js?v='" + globalAppVersion + "'><\/script>")
    document.write("<script src='MainLoader.js?v=" + globalAppVersion + "'><\/script>")
    document.write("<script id='tld-search-srcipt' 
src='https://www.nadlan.gov.il/TldSearch/Scripts/ac.js?v=" + globalAppVersion + "'><\/script>");
</script>

<script src="scripts/dis/accessibility/b1.js?v=3" type="text/javascript"></script>

<script type="text/javascript">

accessibility_rtl = true;
pixel_from_side = 20;
pixel_from_start = 15;

$(document).ready(function () {
    $('#accessibility_icon').attr('src', 'images/accessibility_icon.png')
    $('.accessibility_div_wrap>.btn_accessibility > span.accessibility_component').html('')
});

当我打开站点时,数据加载需要几秒钟:

硒如何解决这些问题?

共有1个答案

乐正明辉
2023-03-14

数据通过JavaScript动态加载。您可以使用请求/json模块来模拟Ajax调用。例如:

import json
import requests


url = 'https://www.nadlan.gov.il/Nadlan.REST/Main/GetAssestAndDeals'
data = {"MoreAssestsType":0,"FillterRoomNum":0,"GridDisplayType":0,"ResultLable":"תל אביב -יפו","ResultType":1,"ObjectID":"5000","ObjectIDType":"text","ObjectKey":"UNIQ_ID","DescLayerID":"SETL_MID_POINT","Alert":None,"X":180428.31832654,"Y":665726.5550939,"Gush":"","Parcel":"","showLotParcel":False,"showLotAddress":False,"OriginalSearchString":"תל אביב  יפו","MutipuleResults":False,"ResultsOptions":None,"CurrentLavel":2,"Navs":[{"text":"מחוז תל אביב - יפו","url":None,"order":1}],"QueryMapParams":{"QueryToRun":None,"QueryObjectID":"5000","QueryObjectType":"number","QueryObjectKey":"SETL_CODE","QueryDescLayerID":"KSHTANN_SETL_AREA","SpacialWhereClause":None},"isHistorical":False,"PageNo":1,"OrderByFilled":"DEALDATETIME","OrderByDescending":True,"Distance":0}
result = requests.post(url, json=data).json()

# uncomment this to print all data:
# print(json.dumps(result, indent=4))

# print all results to screen:
for r in result['AllResults']:
    for k, v in r.items():
        print('{:<30} {}'.format(k, v))
    print('-' * 80)

印刷品:

DEALDATE                       12.12.2020
DEALDATETIME                   2020-12-12T00:00:00
FULLADRESS                     
DISPLAYADRESS                  
GUSH                           7104-289-264
DEALNATUREDESCRIPTION          דירה
ASSETROOMNUM                   3
FLOORNO                        None
DEALNATURE                     90
DEALAMOUNT                     3,650,000
NEWPROJECTTEXT                 1
PROJECTNAME                    מגדלי גינדי תל אביב
BUILDINGYEAR                   None
YEARBUILT                      
BUILDINGFLOORS                 None
KEYVALUE                       10812534855
TYPE                           2
POLYGON_ID                     7104-289
TREND_IS_NEGATIVE              False
TREND_FORMAT                   
--------------------------------------------------------------------------------
DEALDATE                       31.07.2020
DEALDATETIME                   2020-07-31T00:00:00
FULLADRESS                     עגנון ש"י 28, תל אביב -יפו
DISPLAYADRESS                  עגנון ש"י 28
GUSH                           6634-336-33
DEALNATUREDESCRIPTION          דירה
ASSETROOMNUM                   5
FLOORNO                        None
DEALNATURE                     130
DEALAMOUNT                     6,363,000
NEWPROJECTTEXT                 1
PROJECTNAME                    הפילהרמונית
BUILDINGYEAR                   2020
YEARBUILT                      
BUILDINGFLOORS                 9
KEYVALUE                       10812534851
TYPE                           1
POLYGON_ID                     6634-336
TREND_IS_NEGATIVE              False
TREND_FORMAT                   
--------------------------------------------------------------------------------


...and so on.
 类似资料:
  • 问题内容: 我需要从此网站Link中抓取新闻公告。公告似乎是动态生成的。它们不会出现在源代码中。我通常使用机械化,但是我认为它不会起作用。我该怎么办?我可以使用python或perl。 问题答案: 礼貌的选择是询问网站所有者是否具有允许您访问其新闻报道的API。 不太礼貌的选择是跟踪页面加载时发生的HTTP事务,并确定哪一个是AJAX调用,该调用会提取数据。 看起来就是这个。但是看起来它可能包含会

  • 问题内容: 我试图在Scrapy及其xpath选择器的帮助下抓取一个非常简单的网页,但由于某些原因,我拥有的选择器在Scrapy中不起作用,但在其他xpath实用程序中却起作用 我正在尝试解析此html代码段: Scrapy parse_item代码: Scrapy不会从中提取任何文本,但是如果我得到相同的xpath和html代码片段并在此处运行它,则效果很好。 如果我使用这个xpath: 我得到

  • 我正试图浏览一个网站。我尝试过使用两种方法,但都没有提供完整的网站源代码,我正在寻找。我正试图从下面提供的网站URL中获取新闻标题。 URL:"https://www.todayonline.com/" 这是我尝试过但失败的两种方法。 请帮忙。我试着抓取其他新闻网站,这要容易得多。谢谢你。

  • 问题内容: 在网站上,有在标顶部的几个环节,,,和。如果按下以数字标记的链接,它将动态地将一些数据加载到content中。如果被按下,它会用标签页,,,和第4页中的数据显示。 我想从按下的所有链接的内容中抓取数据(我不知道有多少,一次只显示3个,然后) 请举一个例子。例如,考虑网站www.cnet.com。 请指导我下载使用selenium的一系列页面,并自行解析它们以处理漂亮的汤。 问题答案:

  • 问题内容: 因此,我正在使用python和beautifulsoup4(我不受其约束)来抓取网站。问题是当我使用urlib抓取页面的html时,它不是整个页面,因为其中一些是通过javascript生成的。有什么办法可以解决这个问题? 问题答案: 基本上有两个主要选项可以继续: 使用浏览器开发人员工具,查看哪些ajax请求将加载页面并在脚本中模拟它们,您可能需要使用json模块将响应json字符串

  • 问题内容: 我最近一直在学习Python,并全力以赴来构建网络抓取工具。一点都不花哨。其唯一目的是从博彩网站上获取数据并将其放入Excel。 大多数问题都是可以解决的,我周围有些混乱。但是,我在一个问题上遇到了巨大的障碍。如果站点加载一张马表并列出当前的投注价格,则此信息不在任何源文件中。提示是该数据有时是活动的,并且明显从某个远程服务器更新了这些数据。我PC上的HTML只是有一个漏洞,他们的服务