goquery php,golang:Goquery简单爬虫实例-程序员宅基地

技术标签: goquery php  

Selection类型提供的方法,这些方法是页面解析最重要,最核心的方法

1)类似函数的位置操作

-Eq(index int) *Selection     //根据索引获取某个节点集

-  First() *Selection          //获取第一个子节点集

-  Last() *Selection         //获取最后一个子节点集

-  Next() *Selection         //获取下一个兄弟节点集

-  NextAll() *Selection      //获取后面所有兄弟节点集

-  Prev() *Selection         //前一个兄弟节点集

- Get(index int) *html.Node  //根据索引获取一个节点

- Index() int                //返回选择对象中第一个元素的位置

- Slice(start, end int) *Selection  //根据起始位置获取子节点集

2)扩大 Selection 集合(增加选择的节点)

-  Add(selector string) *Selection //将匹配到的节点添加当前节点集合中

-   AndSelf() *Selection    //将堆栈上的前一组元素添加到当前的

-    Union() *Selection    //which is an alias for AddSelection()

3)过滤方法,减少节点集合

-  End() *Selection

- Filter…()     //过滤

- Has…()

- Intersection()   //which is an alias of FilterSelection()

- Not…()

4)循环遍历选择的节点

-  Each(f func(int, *Selection)) *Selection //遍历

- EachWithBreak(f func(int, *Selection) bool) *Selection  //可中断遍历

- Map(f func(int, *Selection) string) (result []string)  //返回字符串数组

5)修改文档

- After…()            //在匹配元素之后追加元素

- Append…()         //将选择器指定的元素添加到匹配元素集合的每个元素的末尾

- Before…()          //在匹配元素之前追加元素

- Clone()             //创建匹配节点的副本

- Empty()            //清空子节点

- Prepend…()

- Remove…()

- ReplaceWith…()

- Unwrap()

- Wrap…()

- WrapAll…()

- WrapInner…()

6)检测或获取节点属性值

- Attr(), RemoveAttr(), SetAttr()  //获取,移除,设置属性的值

- AddClass(), HasClass(), RemoveClass(), ToggleClass()

- Html()  //获取该节点的html

- Length() //返回该Selection的元素个数

- Size(), which is an alias for Length()

- Text()  //获取该节点的文本值

7)查询或显示一个节点的身份

- Contains() //包含

- Is…()

8)在文档树之间来回跳转(常用的查找节点方法)

- Children…()

- Contents()

- Find…()

- Next…()

- Parent[s]…()

- Prev…()

- Siblings…()

操作实例:

func main(){

client := http.Client{}

req,_ := http.NewRequest("GET","http://www.xicidaili.com/wn/1",nil)

req.Header.Add("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79     Safari/537.36 Maxthon/5.2.3.1000")

resp,_ := client.Do(req)

doc,_ := goquery.NewDocumentFromReader(resp.Body)

log.Print(doc.Html())

doc.Find("tbody tr").Each(func(iint, selection *goquery.Selection) {

proxy := models.TbSpiderProxyIp{}

selection.Children().Each(func(iint, selection *goquery.Selection) {

switch i {

case 1:

proxy.Ip = selection.Text()

case 2:

port, _ :=strconv.ParseInt(selection.Text(), 10, 64)

proxy.Port = port

case 3:

proxy.Address = selection.Text()

case 9:

proxy.Check_date = selection.Text()

default:

}

})

proxy.Https =1

proxy.Status =1

proxy.Createdate = time.Now().Format("2006-01-02 15:04:05")

models.InsertTbSpiderProxy(&proxy)

})

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_31860973/article/details/116038031

智能推荐

一起来玩玩WebGL--第一弹-程序员宅基地

文章浏览阅读1.6w次。文末福利:开发者藏经阁NO.1序上一篇文章说到我从客户端转前端的历程,短短一年的时间就打开了前端世界的大门,简直就是有无穷多的东西可玩,以前酷爱Java的我终于见识到什么都可以写的Jav..._一起来玩玩webgl–第一弹

Android AbsListView坐标体系解析-程序员宅基地

文章浏览阅读5.2k次,点赞2次,收藏5次。Android AbsListView坐标体系解析Android的AbsListView与Android ListView不同,AbsListView代表了一个抽象的列表View。在实际的开发中直接使用Android ListView几乎可以完全完成所有与List这类View相关的开发任务,但在极个别情况下, 需要深入到Android的AbsListView中进行仔细的坐标定位。为_abslistview

Hadoop作业提交分析_提交的hadoopjar如何知道数据在哪-程序员宅基地

文章浏览阅读1k次。Hadoop作业提交分析(一)bin/hadoop jar xxx.jar mainclass args……这样的命令,各位玩Hadoop的估计已经调用过NN次了,每次写好一个 Project或对Project做修改后,都必须打个Jar包,然后再用上面的命令提交到Hadoop Cluster上去运行,在开发阶段那是极其繁琐的。程序员是“最懒”的,既然麻烦肯定是要想些法子减少无谓_提交的hadoopjar如何知道数据在哪

【Echarts】Echarts给title添加背景图片_echarts title设置背景-程序员宅基地

文章浏览阅读2.4k次,点赞3次,收藏7次。Echatrs给标题添加背景图片_echarts title设置背景

毕设分享|基于51单片机控制的开关电源设计_51单片机供电电路设计-程序员宅基地

文章浏览阅读1.5k次。电源技术是一种应用功率半导体器件,综合电力变换技术、现代电子技术、自动控制技术的多学科的边缘交叉技术。随着科学技术的发展,电源技术又与现代控制理论、材料科学、电机工程、微电子技术等许多领域密切相关。目前电源技术已逐步发展成为一门多学科互相渗透的综合性技术学科。他对现代通讯、电子仪器、计算机、工业自动化、电力工程、国防及某些高新技术提供高质量、高效率、高可靠性的电源起着关键作用。_51单片机供电电路设计

linux4.15之后国家码使用(CRDA)_linux5 regdb-程序员宅基地

文章浏览阅读2.7k次。(1)需要开启以下宏:CONFIG_CFG80211_REQUIRE_SIGNED_REGDB=yCONFIG_CFG80211_USE_KERNEL_REGDB_KEYS=y(2)下载regulatory.dbandregulatory.db.p7s. Place them into/lib/firmware/directory.Index of /pub/software/network/wireless-regdb/https://mirrors.edge.kernel...._linux5 regdb

随便推点

【Linux】中安装pip(详细教程)_linux pip-程序员宅基地

文章浏览阅读1.6w次,点赞72次,收藏105次。由于系统自带的pyhon中没有pip,而我们这时候恰好需要用到pip,怎么办呢?今天我就来教大家如何在linux中安装pip;_linux pip

6-1单链表逆转(C语言)_给定存储若干整数的单链表,实现单链表逆转c-程序员宅基地

文章浏览阅读571次。6-1单链表逆转(C语言)本题要求实现一个函数,将给定的单链表逆转。函数接口定义List Reverse( List L );其中List结构定义如下:typedef struct Node *PtrToNode;struct Node { ElementType Data; /* 存储结点数据 */ PtrToNode Next; /* 指向下一个结点的指针 */};typedef PtrToNode List; /* 定义单链表类型 */L是给定单链表,函数R_给定存储若干整数的单链表,实现单链表逆转c

关于GEE导出数据时 含空值的栅格图像_selfmask-程序员宅基地

文章浏览阅读3.9k次,点赞8次,收藏25次。GEE提供的卫星数据大多数是有丢失的,若不加操作直接导出为tif,matlab读出来的矩阵该是空值的都是nan,然而arcgis并不能识别空值为nodata,导致制图非常难受。加上unmask函数可以让空值变为某个数字,这里设为-9999,方便后续处理。selfMask()则可以将图像的负值都判定为空。Export.image.toDrive({ image: xinjiang_CH4_anomaly.unmask(-9999), description: 'xinjiang_ch4_anom_selfmask

jmeter聚个报告怎么看qps_jmeter 聚合报告参数详解及TPS 解析-程序员宅基地

文章浏览阅读2.1k次。1、获得TPS插件https://www.cnblogs.com/beginner-boy/p/7806220.html 参见,已保存百度云盘2、添加后,记得使用调度器——每秒50个并发,持续60秒,观察TPS3、TPS,执行一次事务(包括请求、请求服务器、等待服务器返回等等,比如一个TPS事务,可能触发3个QPS请求)PS:一秒钟处理的事务数。TPS值越大,一秒钟处理的事务数就越多,说明处理速..._jmeter查看qps

浙大 PAT 甲级 1077 Kuchiguse_pat甲级可以用翻译吗-程序员宅基地

文章浏览阅读135次。读题目真是要笑死我了…太不正经了。很简单的20分~将题意翻译成代码即可。#include<iostream>#include<string>using namespace std;int main(){ int N; scanf("%d", &N); getchar(); string base; getlin..._pat甲级可以用翻译吗

centos7 svn服务器搭建_svn co authentication方法-程序员宅基地

文章浏览阅读1.5k次。基于centos7 的svn服务器配置_svn co authentication方法

推荐文章

热门文章

相关标签