{"record":{"id":"e409df7554976943","repo":"fish2018/pansou","slug":"s-e409df","errorCode":null,"errorMessage":"[%s] 未能抓取到有效网盘链接","messagePattern":"\\[(.+?)\\] 未能抓取到有效网盘链接","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"plugin/lou1/lou1.go","lineNumber":161,"sourceCode":"\t\t\t\tUniqueID: buildUniqueID(thread.URL),\n\t\t\t\tTitle:    thread.Title,\n\t\t\t\tContent:  strings.TrimSpace(content),\n\t\t\t\tLinks:    detail.links,\n\t\t\t\tTags:     mergeTags(thread.Tags, detail.tags),\n\t\t\t\tChannel:  \"\",\n\t\t\t\tDatetime: detail.datetime,\n\t\t\t}\n\n\t\t\tresultM.Lock()\n\t\t\tresults = append(results, result)\n\t\t\tresultM.Unlock()\n\t\t}()\n\t}\n\n\twg.Wait()\n\n\tif len(results) == 0 {\n\t\treturn nil, fmt.Errorf(\"[%s] 未能抓取到有效网盘链接\", p.Name())\n\t}\n\n\treturn plugin.FilterResultsByKeyword(results, searchKeyword), nil\n}\n\ntype searchThread struct {\n\tTitle   string\n\tURL     string\n\tTags    []string\n\tSummary string\n}\n\nfunc (p *Lou1Plugin) fetchSearchResults(client *http.Client, keyword string) ([]searchThread, error) {\n\tparams := url.Values{}\n\tparams.Set(\"q\", keyword)\n\tparams.Set(\"page\", \"1\")\n\tparams.Set(\"page_size\", fmt.Sprintf(\"%d\", searchLimit))\n\tsearchURL := searchAPIPath + \"?\" + params.Encode()","sourceCodeStart":143,"sourceCodeEnd":179,"githubUrl":"https://github.com/fish2018/pansou/blob/beaa56133755a548ebc51b090b3816e2ae044aa6/plugin/lou1/lou1.go#L143-L179","documentation":"searchImpl fans out over matched threads, extracting netdisk (网盘) links concurrently. If no worker produced a valid link, it returns this error: the search found threads but none contained usable pan links.","triggerScenarios":"All fetched thread pages parsed successfully but none yielded a recognized netdisk URL, leaving len(results)==0 after wg.Wait().","commonSituations":"Threads only contain magnet/torrent links; upstream changed the page markup so the link regex/selector no longer matches; posts are behind login; anti-bot served a stub page.","solutions":["Update the link-extraction parsing to match the current page markup","Test one thread page manually and compare against the parser's selectors","Check whether the site now requires login/cookies to expose pan links","Verify extraction against recent posts (older posts may genuinely lack pan links)"],"exampleFix":"// before\nif len(results) == 0 { return nil, fmt.Errorf(\"no links\") }\n// after\nif len(results) == 0 {\n    log.Printf(\"lou1: %d threads matched but 0 netdisk links (check parser)\", len(threads))\n    return nil, model.ErrNoValidLinks\n}","handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":"results, err := lou1.Search(kw)\nif err != nil && strings.Contains(err.Error(), \"未能抓取到有效网盘链接\") {\n    log.Printf(\"lou1: threads found but no pan links\")\n    return tryAlternatePlugins(kw)\n}","preventionTips":["Add a regression test parsing a saved real thread page","Monitor the ratio threads-found vs links-extracted; a drop signals markup changes","Support multiple link types (magnet, ed2k, pan) to avoid empty extractions"],"tags":["scraping","parsing","search"],"backgroundTag":"empty-result-set","analyzedSha":"beaa56133755a548ebc51b090b3816e2ae044aa6","analyzedAt":"2026-09-07T00:31:18.025Z","contentChangedAt":"2026-09-07T00:31:18.025Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}