最近看了下多多和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&csdn
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), "", "", -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)
: 打印商品信息。
其实很多东西从源头商家拿货是很便宜的,而且质量没的说杠杠的,就是有些人投机取巧用别的店铺倒卖提高价格,发货什么的都不用自己操作,只需要手动提交订单就行,轻松就能赚取差价。上面的代码很完善,解释也挺不错的,如果有啥问题可以评论区留言讨论。