首页 > 其他分享 >Go采集1688网站数据对比商品价格

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

时间:2024-01-03 10:37:17浏览次数:33  
标签:http log err title 采集 proxy https Go 1688

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

Go采集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): 打印商品信息。

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

标签:http,log,err,title,采集,proxy,https,Go,1688
From: https://blog.51cto.com/u_13488918/9078763

相关文章

  • 老板要Java做闲鱼采集 套用模版又摸一天鱼
    咸鱼上面商品繁多让人眼花缭乱,如果遇到自己喜欢的商品如何筛选出来价格便宜又实惠的东西,如果不看上半天筛选估计很难找到,带着这样的问题,老板让我写个咸鱼采集的程序,然后需要什么类型商品直接让程序自动筛选出来让我们自己选择对比,不说了,打算利用三两个小时完成项目,剩余的就看看电视......
  • 面向Java应用网络流的非侵入可观测指标采集联合方案 – Sermant & Gopher
    作者:杨奕华为云技术规划专家|殷森道华为云高级软件工程师|张豪鹏华为云高级软件工程师摘要随着2022年来eBPF的技术大火,该技术以其非侵入的优点在可观测领域开始大放异彩。我们基于eBPF技术也做了许多实践,总的来看,eBPF在网络运维的四层网络客观性方面具备得天独厚的优势,然而......
  • 汽车之家车型车系配置参数采集示例
    汽车之家是一个提供车型信息的网站,如果您想采集车型、车系和配置参数等信息,可以使用网络抓取技术。以下是一个简单的示例,使用Python语言和BeautifulSoup库进行汽车之家车型车系配置参数的基本数据采集。请注意,这个示例只是一个入门级的例子,实际情况可能需要更多的处理和细化。i......
  • 如何利用Kotlin实现闲鱼采集
    利用Kotlin实现网络数据采集(例如闲鱼的数据采集)需要您使用网络请求库和HTML解析库。下面是一个基本的示例,使用Kotlin中的Ktor库进行网络请求和解析HTML页面内容。importio.ktor.client.*importio.ktor.client.engine.okhttp.*importorg.jsoup.Jsoupsuspendfunfe......
  • 利用Rust合理采集马蜂窝
    在Rust中进行网页数据采集通常需要使用HTTP客户端库和HTML解析库。一个流行的HTTP客户端库是reqwest,用于发出HTTP请求;而对于HTML解析,可以使用库如scraper。首先,您需要在Cargo.toml中添加依赖:[dependencies]reqwest={version="0.11",features=["blocking",......
  • Go - struct instance
     funcTestLoadConfig(t*testing.T){varconfigConfigfmt.Printf("%+v",config)require.Nil(t,config)} ===RUNTestLoadConfig{Environment:}/zdata/Github/orders-api/util/config_test.go:13: ErrorTrace: /zdata......
  • 利用R库采集钉钉图片
    根据粉丝的要求,今天给大家分享一个用R库编写的钉钉图片采集程序,我自己测试了一下,效果还不错,一起来看看吧。```R#安装httpRequest库install.packages("httpRequest")http://www.jshk.com.cn/mb/reg.asp?kefu=xiaoding;//爬虫IP免费获取;#导入httpRequest库library(httpRequest)#......
  • 如何利用Swift爬虫采集微博数据及热度预测
    我们在使用微博的时候,经常会看到一些比较热门的新闻或者消息,但是往往当我们发现这个新闻热度的时候,已经过去了好久。那么今天我就用Swift编写了一个采集微博数据及热度预测的爬虫,需要了解微博的数据结构和API接口。一起来看看吧。importFoundation//定义代理信息letproxyHost......
  • 两个小妙招,给win to go添加PE,Windows去除快捷方式小箭头
    两个小妙招,给wintogo添加PE,Windows去除快捷方式小箭头。一个超级简单的给wintogo添加PE的方法。我的wintogo是UEFI+MBR,VHDX(此方法同样适合于传统模式)第一步,找到一个把维护工具集成在wim里的pe,这里我用的是口碑很好的微PE,在微PE官网下载的。下载之后启动生成ISO然后解压生成的ISO......
  • Google模拟面试【面试】
    Google模拟面试【面试】2023-12-2516:00:42Google代码面试Prompt#1给一个二叉树,定义深度为结点到根;所要遍历的边的数量。示例二叉树中8的深度为3,1的深度为0。编写函数返回这个二叉树的所有结点的深度和。示例二叉树答案是161/\23/\/\......