最近看了下多多和1688的一些商品价格,发现好多店铺都是无货源拿货一件发货,这就导致层层叠加价格翻了不知道几倍,真所谓多花钱办的事还是一样,因此,今天我就通过一个爬虫程序监控对应商品价格,了解行业龙头低价是多少,防止被割韭菜。

Go采集1688网站数据对比商品价格_1688

以下是使用 Go 语言编写的爬虫程序,它可以爬取 采集1688网站数据 的内容。这个程序使用了两个包:net/http 和 html 解析器。代理信息使用了 http_proxy 和 https_proxy 环境变量。

package main

import (
    "fmt"
    "io/ioutil"
    "log"
    "net/http"
    "net/url"
    "strings"
)

func main() {
    // 代理信息
    // 提取代理ip
    // jshk.com.cn/mb/reg.asp?kefu=xjy&51cto
    proxy := "duoip:8000"
    // 采集的URL
    url := "https://www.1688.com/"

    // 设置代理
_PROXY_ENV := "http_proxy"
_HTTPS_PROXY_ENV := "https_proxy"
    http_proxy := proxy
    https_proxy := proxy

    // 设置环境变量
    if err := os.Setenv(_PROXY_ENV, http_proxy); err != nil {
        log.Fatal(err)
    }
    if err := os.Setenv(_HTTPS_PROXY_ENV, https_proxy); err != nil {
        log.Fatal(err)
    }

    // 发送请求
    resp, err := http.Get(url)
    if err != nil {
        log.Fatal(err)
    }
    defer resp.Body.Close()

    // 读取响应体
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        log.Fatal(err)
    }

    // 解析响应体
    body = strings.Replace(string(body), "<script>", "", -1)
    body = strings.Replace(string(body), "</script>", "", -1)
    doc, err := goquery.NewDocumentFromReader(strings.NewReader(body))
    if err != nil {
        log.Fatal(err)
    }

    // 获取商品列表
    list := doc.Find(".product-list")
    for _, item := range list.FindAll("li") {
        // 获取商品标题
        title := item.Find(".product-title").Text()
        // 获取商品链接
        link := item.Find(".product-title a").Attr("href")
        // 打印商品信息
        fmt.Printf("标题: %s, 链接: %s\n", title, link)
    }
}

以下是每行代码的解释:

1、import "fmt": 导入 fmt 包,用于打印输出。

2、import "io/ioutil": 导入 ioutil 包,用于读取文件。

3、import "log": 导入 log 包,用于打印错误信息。

4、import "net/http": 导入 http 包,用于发送 HTTP 请求。

5、import "net/url": 导入 url 包,用于处理 URL。

6、import "strings": 导入 strings 包,用于字符串处理。

7、func main() { ..、}: 定义主函数。

8、proxy := "duoip:8000": 定义代理信息。

9、url := "https://www.1688.com/": 定义采集的URL。

10、http_proxy := proxy: 设置 http_proxy 环境变量。

11、https_proxy := proxy: 设置 https_proxy 环境变量。

12、if err := os.Setenv(_PROXY_ENV, http_proxy); err != nil {...}: 设置 http_proxy 环境变量。

13、if err := os.Setenv(_HTTPS_PROXY_ENV, https_proxy); err != nil {...}: 设置 https_proxy 环境变量。

14、resp, err := http.Get(url): 发送 GET 请求到 URL。

15、defer resp.Body.Close(): 闭包函数,关闭响应体。

16、body, err := ioutil.ReadAll(resp.Body): 读取响应体到内存。

17、doc, err := goquery.NewDocumentFromReader(strings.NewReader(body)): 使用 goquery 解析响应体。

18、list := doc.Find(".product-list"): 获取商品列表。

19、for _, item := range list.FindAll("li") {...}: 遍历商品列表。

20、title := item.Find(".product-title").Text(): 获取商品标题。

21、link := item.Find(".product-title a").Attr("href"): 获取商品链接。

22、fmt.Printf("标题: %s, 链接: %s\n", title, link): 打印商品信息。

其实很多东西从源头商家拿货是很便宜的,而且质量没的说杠杠的,就是有些人投机取巧用别的店铺倒卖提高价格,发货什么的都不用自己操作,只需要手动提交订单就行,轻松就能赚取差价。上面的代码很完善,解释也挺不错的,如果有啥问题可以评论区留言讨论。