解析/抓取/python/requests/BeautifulSoup4。如何解析这个网站?

问题描述 投票:0回答:1

网站:https://www.nieruchomosci-online.pl/szukaj.html?3,mieszkanie,wynajem,,Szczecin:19503 我想解析所有广告,除了特色广告。问题是几乎每个广告都有不同的类别,我无法将它们收集到一个列表中。特色广告可以在 2 页甚至 3 页上。精选广告标记在网站顶部,但普通广告则没有。此外,最后几页还有存档的广告。

ogloszenia = soup.find_all(class_='column-container column_default')

我只想收集容器,但精选和存档的也有这样的容器。我也不能只找到“Lista ogłoszeń”,然后再找到_sibling。因为下一页没有这样的字段Lista ogloszen下一页没有这样的字段

python parsing web-scraping beautifulsoup python-requests
1个回答
0
投票

我建议使用他们的 Ajax 分页 API,它以 Json 格式返回有关广告的数据(还有广告是否存档的信息):

import json

import requests

api_url = "https://www.nieruchomosci-online.pl/szukaj.html"
params = {"3,mieszkanie,wynajem,,Szczecin:19503": "", "p": "1", "ajax": "1"}

headers = {
    "X-Requested-With": "XMLHttpRequest",
    "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:125.0) Gecko/20100101 Firefox/125.0",
}


for params["p"] in range(1, 3):  # <-- increase number of pages here
    data = requests.get(api_url, params=params, headers=headers).json()

    # print(json.dumps(data, indent=4))

    for k, v in data["listAdditionalData"].items():
        print(k)
        print(v["metaTitle"])
        print(v["primaryPrice"], "zł")
        print("ARCHIVE" if v["isArchive"] == "1" else "NOT ARCHIVE")
        print()

打印:


...

a23621242
Wynajmę mieszkanie 100 m² Szczecin, Świerczewo
4600 zł
NOT ARCHIVE

a24885688
Piękne mieszkanie w kamienicy, Centrum Szczecin
2600 zł
NOT ARCHIVE

a24862202
Ul. Emilii Plater Miejsca postojowe w cenie Szczecin, Centrum
1900 zł
NOT ARCHIVE

...
© www.soinside.com 2019 - 2024. All rights reserved.