最近看了下多多和1688的一些商品价格,发现好多店铺都是无货源拿货一件发货,这就导致层层叠加价格翻了不知道几倍,真所谓多花钱办的事还是一样,因此,今天我就通过一个爬虫程序监控对应商品价格,了解行业龙头低价是多少,防止被割韭菜。
以下是使用 Go 语言编写的爬虫程序,它可以爬取 采集1688网站数据 的内容。这个程序使用了两个包:net/http 和 html 解析器。代理信息使用了 http_proxy 和 https_proxy 环境变量。
package mainimport ("fmt""io/ioutil""log""net/http""net/url""strings"
)func main() {// 代理信息 // 提取代理ip// jshk.com.cn/mb/reg.asp?kefu=xjy&csdnproxy := "duoip:8000"// 采集的URLurl := "https://www.1688.com/"// 设置代理
_PROXY_ENV := "http_proxy"
_HTTPS_PROXY_ENV := "https_proxy"http_proxy := proxyhttps_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)
: 打印商品信息。
其实很多东西从源头商家拿货是很便宜的,而且质量没的说杠杠的,就是有些人投机取巧用别的店铺倒卖提高价格,发货什么的都不用自己操作,只需要手动提交订单就行,轻松就能赚取差价。上面的代码很完善,解释也挺不错的,如果有啥问题可以评论区留言讨论。