You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

爬取korter.az网站遇'unmatched '}'错误,求解决方案及指定内容爬取方法

问题解决与爬取方案

一、修复'unmatched '}'错误

你当前依赖固定字符串的正则匹配方式极不稳定,页面内容一旦更新就会失效,还容易捕获到格式错误的JSON片段。更可靠的方式是直接提取页面中存储数据的脚本标签——这类React构建的网站通常会把核心数据放在id="__NEXT_DATA__"的script标签里:

from bs4 import BeautifulSoup as bs
import requests
import json
import pandas as pd

url = "https://korter.az/yasayis-kompleksleri-baku"
html_doc = requests.get(url).text
soup = bs(html_doc, "html.parser")

# 定位存储核心数据的script标签
data_script = soup.find("script", id="__NEXT_DATA__").string
# 解析JSON格式数据
data_json = json.loads(data_script)

# 从JSON结构中提取广告数据(路径需根据实际结构调整,示例为常见路径)
ads_data = data_json["props"]["pageProps"]["data"]["ads"]
df = pd.DataFrame(ads_data)
df.to_excel('korter.xlsx', index=False)

这种方式避免了正则匹配的局限性,数据提取更稳定。如果找不到__NEXT_DATA__标签,也可以搜索包含"ads"或楼盘关键词的script内容。

二、爬取所有'199 yeni tikili binalar'内容

'199 yeni tikili binalar'指新建住宅楼,可通过以下两种方式爬取:

方法1:直接访问分类页

手动点击网站的"新建楼盘"筛选按钮,复制对应的URL(示例URL为https://korter.az/yasayis-kompleksleri-baku?type=yeni-tikili,需以实际页面为准),再用上述JSON提取方法获取数据:

from bs4 import BeautifulSoup as bs
import requests
import json
import pandas as pd

# 替换为新建楼盘的实际分类URL
url = "https://korter.az/yasayis-kompleksleri-baku?type=yeni-tikili"
html_doc = requests.get(url).text
soup = bs(html_doc, "html.parser")

data_script = soup.find("script", id="__NEXT_DATA__").string
data_json = json.loads(data_script)

# 提取新建楼盘数据
new_buildings = data_json["props"]["pageProps"]["data"]["ads"]
df_new = pd.DataFrame(new_buildings)
df_new.to_excel('yeni_tikili_binalar.xlsx', index=False)

方法2:遍历分页爬取全部内容

如果目标内容分布在多页,可根据分页URL规律循环请求:

from bs4 import BeautifulSoup as bs
import requests
import json
import pandas as pd
import time

base_url = "https://korter.az/yasayis-kompleksleri-baku?type=yeni-tikili&page={}"
all_data = []
page = 1

while True:
    url = base_url.format(page)
    response = requests.get(url)
    if response.status_code != 200:
        break
    
    soup = bs(response.text, "html.parser")
    data_script = soup.find("script", id="__NEXT_DATA__")
    if not data_script:
        break
    
    data_json = json.loads(data_script.string)
    ads = data_json["props"]["pageProps"]["data"]["ads"]
    if not ads:
        break
    
    all_data.extend(ads)
    page += 1
    time.sleep(1)  # 添加请求间隔,避免被封禁

df_all = pd.DataFrame(all_data)
df_all.to_excel('tum_yeni_tikili_binalar.xlsx', index=False)

注意事项

  • 爬取时需遵守网站robots.txt规则,添加请求间隔避免IP被封禁
  • 网站JSON结构可能随版本更新,需定期检查数据提取路径是否正确

内容的提问来源于stack exchange,提问作者Rasim Dilbani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 18:40:38