Skip to content

heyzo scraper 永遠回 None — 站方把英文頁 JSON-LD 改成 JS 動態建立 #106

Description

@slive777

現象

heyzo 來源搜尋一律「無結果」。8 源金絲雀 test_heyzo_canary FAIL:0 healthy, 5 returned bad/empty content

根因(已實證,非推理)

站是活的:5 個金絲雀番號(0783/1000/1500/2000/2300)在 www.heyzo.comen.heyzo.com 都回 200 + 真內容

core/scrapers/heyzo.pysearch() 走英文頁 → _extract_json_ld()<script type="application/ld+json">。heyzo 已改成由 JS 在瀏覽器端動態建立該 script tag:

var script = document.createElement("script");
script.setAttribute("type", "application/ld+json");
var movie_obj = { "@context": "http://schema.org", "@type": "Movie",
                  "name": "...", "actor": person, "duration": "...", ... };

伺服器回的 HTML 裡沒有可解析的靜態 ld+json 區塊 → _extract_json_ld 回 None → search() return None。零 log、零例外(同 0.11.12 javdb 那種靜默失敗指紋)。

重現:

python -c "from core.scrapers.heyzo import HEYZOScraper; print(HEYZOScraper().search('HEYZO-0783'))"   # None
curl -s https://en.heyzo.com/moviepages/0783/index.html | grep -c 'ld+json'                            # 1(但在 JS 裡)

修法方向

資料還在 HTML 裡,只是換了載體 — regex 撈 var movie_obj = {...} / person 兩個 JS 物件字面即可,不需要 headless 瀏覽器。

依 [feedback_scraper_real_fixtures] 慣例:補 parse 的 RED 測試要餵 tests/fixtures/scrapers/*.html 真 fixture 跑 .search(),別手搭合成 HTML(會抹平空佔位/null/merge 漏欄位)。

建議一併比照 0.11.12 javdb 補診斷 log(JSON-LD 抓不到時 log 一次 warning)— 排查本 bug 最貴的成本就是零 log。

範圍

  • 與 feature/99(focal 手動編輯)無關,是外部 rot,不擋 0.12.1 出貨(pre-merge §3.6「金絲雀不擋 PR」)。
  • 影響面:heyzo 單源。其餘 7 源金絲雀 PASS。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions