javascript - 用 python 抓取一个杂乱无章的 javascript-heavy 网站
问题描述
我试图从这个页面上抓取家庭链接:
https://www.sreality.cz/en/search/to-rent/apartments?page=2
例如,对于第一间公寓,我想获得以下链接:
然而,该网站在 javascript 上相当繁重。通过使用 requests.get() 我只获得了一个无信息的 html 代码块:
from requests import get
i = 2
url = f"https://www.sreality.cz/en/search/to-rent/apartments?page={i}"
response = get(url)
print(response.text)
-----------------------------
<!doctype html>
<html lang="{{ html.lang }}" ng-app="sreality" ng-controller="MainCtrl">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1.0,minimal-ui">
<!--- Nastaveni meta pres JS a ne pres Angular, aby byla nastavena default hodnota pro agenty co nezvladaji PhantomJS --->
<title ng:bind-template="{{metaSeo.title}}">Sreality.cz ⢠reality a nemovitosti z celé ÄR</title>
<meta name="description" content="NejvÄtÅ¡Ã nabÃdka nemovitostà v ÄR. NabÃzÃme byty, domy, novostavby, nebytové prostory, pozemky a dalÅ¡Ã reality k prodeji i pronájmu. Sreality.cz">
<meta property="og:title" content="Sreality.cz ⢠reality a nemovitosti z celé ÄR">
<meta property="og:type" content="website">
<meta property="og:image" content="https://www.sreality.cz/img/sreality-logo-og.png">
-----------------------------
ETC ...
因此,问题是,如何对此类网站进行一些简单的抓取活动?
在此先感谢您的帮助。
解决方案
我认为该网站没有公共 API,但从网络选项卡查看 API 调用,我可以获取您需要的详细信息并将其作为链接查看下面的代码。
如果您有任何问题,请告诉我:)
import time
import requests
page=2
numberofresults=20
epochmiliseconds=round(time.time() * 1000)
paramsdict={
"category_main_cb":1,
"category_type_cb":2,
"page":page,
"per_page":numberofresults,
"tms":epochmiliseconds
}
data=requests.get("https://www.sreality.cz/api/en/v2/estates",params=paramsdict).json()
for lead in data["_embedded"]["estates"]:
locality=lead["seo"]["locality"]
name=lead["name"]
hash_id=lead["hash_id"]
typedata=[s for s in name.split(" ") if "+" in s][0].replace("\u00a0"," ").split(" ")[0]
print(f'https://www.sreality.cz/en/detail/lease/flat/{typedata}/{locality}/{hash_id}'))
推荐阅读
- python - QQuickView 标题栏在辅助显示器上太大
- python - Matplotlib 使用 cartopy 绘制先前帧的动画
- docker - 无法使用 dockerfile 在 heroku 上推送 clojure 项目
- java - 在不同的关系属性中使用带有限制的 Hibernate Criteria
- javascript - c# QueryString 如何将数据从一个网页发送到另一个网页?
- html - 更改导航以向左展开
- python - 如何在 Python 3 中等待字符输入时输出?
- java - FileProvider - java.lang.IllegalArgumentException:找不到配置的根目录,其中包含
- linux - 如何快速转储 Postgres 数据库
- c# - Roslyn - 使用 CSharpCompilation 编译程序集以在 CSharpCompilation 编译的另一个程序中使用