优化封面抓取逻辑
This commit is contained in:
parent
ec33be03ac
commit
51f84bea08
38
crawler.go
38
crawler.go
@ -120,18 +120,15 @@ func (c *Crawler) fetchCoverImg(code string) error {
|
||||
nameSlice[0] = nameSlice[0][1:]
|
||||
}
|
||||
|
||||
fileName := strings.Join([]string{
|
||||
c.outputPath,
|
||||
string(os.PathSeparator),
|
||||
fileName := filepath.Join(c.outputPath, fmt.Sprintf("%s-%s%s",
|
||||
strings.ToUpper(nameSlice[0]),
|
||||
"-",
|
||||
nameSlice[1],
|
||||
suffix,
|
||||
}, "")
|
||||
))
|
||||
|
||||
req, err := http.NewRequest("GET", imgUrl, nil)
|
||||
if err != nil {
|
||||
return err
|
||||
return fmt.Errorf("创建请求失败: %w", err)
|
||||
}
|
||||
|
||||
// 模拟浏览器请求
|
||||
@ -139,7 +136,7 @@ func (c *Crawler) fetchCoverImg(code string) error {
|
||||
|
||||
resp, err := http.DefaultClient.Do(req)
|
||||
if err != nil {
|
||||
return err
|
||||
return fmt.Errorf("请求失败: %w", err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
@ -148,16 +145,16 @@ func (c *Crawler) fetchCoverImg(code string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// 读取整个图片数据到内存
|
||||
// 先完整读取 HTTP Body
|
||||
imgData, err := io.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
return fmt.Errorf("无法读取图片数据: %v", err)
|
||||
return fmt.Errorf("读取图片数据失败: %w", err)
|
||||
}
|
||||
|
||||
imgReader := bytes.NewReader(imgData)
|
||||
img, _, err := image.DecodeConfig(imgReader)
|
||||
// 使用内存数据解码图片
|
||||
img, _, err := image.DecodeConfig(bytes.NewReader(imgData))
|
||||
if err != nil {
|
||||
return err
|
||||
return fmt.Errorf("图片解码失败: %w", err)
|
||||
}
|
||||
|
||||
// 图片高度未到达配置最低值则抛弃
|
||||
@ -165,20 +162,9 @@ func (c *Crawler) fetchCoverImg(code string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// 重新创建 Reader 以供文件保存
|
||||
if _, err := imgReader.Seek(0, io.SeekStart); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
file, err := os.Create(fileName)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
_, err = io.Copy(file, imgReader)
|
||||
if err != nil {
|
||||
return err
|
||||
// 将内存数据写入文件
|
||||
if err := os.WriteFile(fileName, imgData, 0644); err != nil {
|
||||
return fmt.Errorf("文件写入失败: %w", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
|
Loading…
Reference in New Issue
Block a user