Skip to content

akkagao/jdSpider

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Golang使用goquery抓取京东商品价格Demo

本文主要介绍基于goquery实现一个简单的京东商品价格数据爬虫

分析京东网页分页地址

分页网页结构

  • 获取主要内容组件 分析得到 id为"J_goodsList" 的div为主要内容列表
  • 里面UL列表为每个商品展示数据
  • LI节点中 class为"p-price"的div为价格数据
  • LI节点中class为"p-name p-name-type-2"的div为商品名称数据

安装依赖包

此项目只是抓取数据存入本地文件,所以第三方包只依赖goquery

github.com/PuerkitoBio/goquery

编码

package main

import (
	"fmt"
	"github.com/PuerkitoBio/goquery"
	"jdSpider/util"
	"log"
	"net/http"
	"strings"
)

func main() {
	// 测试功能只抓取10页数据
	for i := 1; i < 10; i++ {
		url := fmt.Sprintf("https://search.jd.com/Search?keyword=mac&enc=utf-8&wq=mac&page=%d", i)
		fetchData(url)
	}

}

/**
抓取数据
*/
func fetchData(url string) {
	fmt.Println(url)
	client := http.Client{}
	request, err := http.NewRequest("GET", url, strings.NewReader("name=cjb"))
	if err != nil {
		log.Println(err)
	}

	request.Header.Set("User-Agent", "Mozilla/5.0 (Linux; U; Android 5.1; zh-cn; m1 metal Build/LMY47I) AppleWebKit/537.36 (KHTML, like Gecko)Version/4.0 Chrome/37.0.0.0 MQQBrowser/7.6 Mobile Safari/537.36")

	response, err := client.Do(request)
	if err != nil {
		log.Println(err)
	}
	// 使用NewDocumentFromResponse方式获取获取数据,是应为某些网页会有防止爬取限制,需要设置Header防止被限制
	doc, err := goquery.NewDocumentFromResponse(response)
	/**
	1:获取ID为J_goodsList 的div节点
	2:获取ul节点
	3:获取li节点列表
	*/
	doc.Find("div[id=\"J_goodsList\"]").Find("ul").Find("li").Each(func(i int, selection *goquery.Selection) {
		// 获取class为p-name p-name-type-2 的div节点,然后获取em子节点的文字内容作为商品标题
		title := selection.Find("div[class=\"p-name p-name-type-2\"]").Find("em").Text()
		// 获取class为p-price的节点,然后获取i标签中的文字作为价格
		price := selection.Find(".p-price").Find("i").Text()
		// 列表中有部分内容是广告内容,不属于标准商品数据,这里排除掉
		if len(title) > 1 {
			// 把获取到的数据追加到jdprive.txt 文件中,格式为  商品名称+四个制表符+价格+换行
			util.AppendToFile("jdprive.txt", title+"\t\t\t\t"+price+"\n")
		}

	})
}

说明

京东网页HTML结构可能随时会变动,这个程序你看到的时候可能已经无法抓取到数据。但是按照上面的说明可以很容易抓取新网页内容的数据。 jdprive.txt 文件为抓取的内容数据 项目doc目录下面的jd.html 文件是我写这个程序时候保存的网页数据

About

Golang使用goquery抓取京东商品价格

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages