优化封面抓取逻辑
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:]
|
nameSlice[0] = nameSlice[0][1:]
|
||||||
}
|
}
|
||||||
|
|
||||||
fileName := strings.Join([]string{
|
fileName := filepath.Join(c.outputPath, fmt.Sprintf("%s-%s%s",
|
||||||
c.outputPath,
|
|
||||||
string(os.PathSeparator),
|
|
||||||
strings.ToUpper(nameSlice[0]),
|
strings.ToUpper(nameSlice[0]),
|
||||||
"-",
|
|
||||||
nameSlice[1],
|
nameSlice[1],
|
||||||
suffix,
|
suffix,
|
||||||
}, "")
|
))
|
||||||
|
|
||||||
req, err := http.NewRequest("GET", imgUrl, nil)
|
req, err := http.NewRequest("GET", imgUrl, nil)
|
||||||
if err != 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)
|
resp, err := http.DefaultClient.Do(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return fmt.Errorf("请求失败: %w", err)
|
||||||
}
|
}
|
||||||
defer resp.Body.Close()
|
defer resp.Body.Close()
|
||||||
|
|
||||||
@ -148,16 +145,16 @@ func (c *Crawler) fetchCoverImg(code string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// 读取整个图片数据到内存
|
// 先完整读取 HTTP Body
|
||||||
imgData, err := io.ReadAll(resp.Body)
|
imgData, err := io.ReadAll(resp.Body)
|
||||||
if err != nil {
|
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 {
|
if err != nil {
|
||||||
return err
|
return fmt.Errorf("图片解码失败: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 图片高度未到达配置最低值则抛弃
|
// 图片高度未到达配置最低值则抛弃
|
||||||
@ -165,20 +162,9 @@ func (c *Crawler) fetchCoverImg(code string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// 重新创建 Reader 以供文件保存
|
// 将内存数据写入文件
|
||||||
if _, err := imgReader.Seek(0, io.SeekStart); err != nil {
|
if err := os.WriteFile(fileName, imgData, 0644); err != nil {
|
||||||
return err
|
return fmt.Errorf("文件写入失败: %w", err)
|
||||||
}
|
|
||||||
|
|
||||||
file, err := os.Create(fileName)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
defer file.Close()
|
|
||||||
|
|
||||||
_, err = io.Copy(file, imgReader)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
Loading…
Reference in New Issue
Block a user