幽灵蛛(pholcus)规则(二)
此文档主要涉及到页面解析,goquery的使用方法,我觉得可以专门写篇文档。package pholcus_lib
// 基础包
import (
"github.com/henrylee2cn/pholcus/common/goquery" //DOM解析
"github.com/henrylee2cn/pholcus/app/downloader/request" //必需
. "github.com/henrylee2cn/pholcus/app/spider" //必需
// . "github.com/henrylee2cn/pholcus/app/spider/common" //选用
// "github.com/henrylee2cn/pholcus/logs"
// net包
"net/http" //设置http.Header
// "net/url"
// 编码包
// "encoding/xml"
//"encoding/json"
// 字符串处理包
//"regexp"
// "strconv"
"strings"
// 其他包
"fmt"
// "math"
// "time"
)
func init() {
FileTest1.Register()
}
var FileTest1 = &Spider{
Name: "meizitu图片下载",//url:http://www.meizitu.com/
Description: "meizitu图片下载",
// Pausetime: 300,
// Keyin: KEYIN,
// Limit: LIMIT,
EnableCookie: false,
RuleTree: &RuleTree{
Root: func(ctx *Context) {
ctx.AddQueue(&request.Request{
Url: "http://www.meizitu.com/",
Rule: "meizitu",
ConnTimeout: -1,
DownloaderID: 0, //图片等多媒体文件必须使用0(surfer surf go原生下载器)
})
},
Trunk: map[string]*Rule{
"meizitu":{
ParseFunc: func(ctx *Context) {
query := ctx.GetDom()
query.Find("#picture p a").Each(func(i int, s *goquery.Selection) { //其中picture是id,
//p是tagname a也是tagname,这里就找到了a,而且是好多个,所以用了each进行循环
//s.Find('p>a').
fmt.Println("打印一下")
fmt.Println(s.Html())//s对象的内部HTML代码
fmt.Println("-----------")
url1,_:=s.Attr("href")//s的href属性值
fmt.Println(url1)
fmt.Println("??????????????")
//t:=s.Find('a').Eq(0)
//fmt.Println("A的html",t.Html())
if href, ok := s.Attr("href"); ok {
ctx.AddQueue(&request.Request{
Url: href,
Header: http.Header{"Content-Type": []string{"text/html; charset=gbk"}},
Rule: "图片URL",
})
}
})
},
},
"图片URL": {
ParseFunc: func(ctx *Context) {
query := ctx.GetDom()
query.Find("#picture p img").Each(func(i int, s *goquery.Selection) {//同上
//s.Find('p>a').
fmt.Println("二级页面开始!打印一下????????????????????????????????????")
fmt.Println(s.Html())
fmt.Println("-----------")
url1,_:=s.Attr("src")
fmt.Println(url1)
fmt.Println("??????????????")
fmt.Println("二级页面结束!")
//t:=s.Find('a').Eq(0)
//fmt.Println("A的html",t.Html())
if href, ok := s.Attr("src"); ok {
ctx.AddQueue(&request.Request{
Url: href,
Header: http.Header{"Content-Type": []string{"text/html; charset=gbk"}},
Rule: "图片下载",
})
}
})
},
},
"图片下载": {
ParseFunc: func(ctx *Context) {
fmt.Println("图片链接URL:",ctx.GetUrl())
picurl:=ctx.GetUrl()//获取链接值,用于为图片命名,这里可能还会涉及新建文件夹,所以后面还需要想想怎么传参数?????
picname:=strings.Replace(picurl,"http://mm.howkuai.com/wp-content/uploads/","",-1)//替换值
picname=strings.Replace(picname,"/","-",-1)//替换值
ctx.FileOutput(picname) // 等价于ctx.AddFile("baidu")
},
},
},
},
}
转载于:https://www.cnblogs.com/SSSR/p/6344816.html
幽灵蛛(pholcus)规则(二)相关推荐
- java模拟微信抢红包金额算法规则二倍均值法模拟(满满的注释)
二倍均值法模拟微信抢红包金额算法规则 ```java /*** 二倍均值法* @param amount 总金额* @param min 最小金额* @param num 个数* 本帖只提供思路,实际 ...
- 陆琪《潜伏在办公室》:职场潜规则二十三条
职场潜规则第一条:理想很重要,但比理想更重要的是利益. 职场潜规则第二条:表面是公义,心里是生意,这才是职场的本质. 职场潜规则第三条:待人以诚,但诚是有目标和尺度的. 职场潜规则第四条:工作不会害你 ...
- 深入理解成员函数的重载、隐藏、覆盖规则(二)
本文作者:islwj 本文出处:http://blog.csdn.net/islwj 声明: 本文可以不经作者同意, 任意复制, 转载, 但任何对本文的引用都请保留文章开始前三行的作者, 出处以及声明 ...
- 色彩的数学规则(二)(转)
http://zhan.renren.com/mathart?gid=3602888498046783626&from=PubNewFeed&ref=hotnewsfeed&s ...
- 前端学习(1307):模块查找规则二
- 二、Python第二课——变量命名规则及字符串变量相关函数
目录 一.变量命名规则 二.字符串变量及相关函数 1.字符串变量 2.相关函数 最后琐碎杂物: 1.字符串之间的拼接 2.字符串格式控制(制表符和换行) 一.变量命名规则 正如其他编程语言一样,程序离 ...
- 二、SonarQube自定义规则
一.介绍 不可避免的,在实际的开发中sonar提供的官方的代码检测经常不满足我们的要求,比如如下代码: /*** 以下代码sonar会认证name和age是从来没有使用过的,它不认识lombok的 ...
- 变量的命名规则十二条
一般规则 规则一 直观可以拼读,望文得知意,便于记忆,采用英文单词或组合,不建议使用拼音,英文单词也不要太复杂,建议使用简写 规则二 变量长度符合"min_length && ...
- abbex 区块链学院如何交易之 第六章 当日交易:规则成就短线高手
第六章 当日交易:规则成就短线高手 Abbex 规则一强体防身,规则二断铁熔金.鏖战当日交易,成就短线高手,惟有将规则融会贯通. 阿瑟:这一章的标题使我好像看到一位艺术家正在描绘的这样一幅图画:所有的 ...
- abbex 区块链学院如何交易之 第十二章 反败为胜:重创之后重拾信心
第十二章 反败为胜:重创之后重拾信心 Abbex 交易是失败者的游戏,大师和我们同样面对失败的概率.他用什么手法重新开始,信心 倍增? 阿瑟:你是不是把最顶级的智慧留在了最后?(注:在写这一章的时候, ...
最新文章
- Dlib库中实现正脸人脸检测的测试代码
- 谈谈自己对java的学习看法
- 《精解Windows8》——2.6 Windows应用商店
- lisp 河道水面线计算_水面漂浮泡沫生活垃圾隔离拦载浮筒使用方法
- linux下编译为知笔记,为知笔记 Linux 版安装
- 201521123004《软件工程》个人阅读作业1
- woff字体MIME类型配置
- 如何解决ado.net entity framework的使用,再别的调用项目中依然正常
- 吴恩达《机器学习》第十八章:图片文字识别OCR
- python中类的定义_python中类的概念
- 拓端tecdat|R语言生存分析可视化分析
- 跳板机+谷歌验证码 ssh 自动登录
- SATI 国产文献题录信息统计分析工具:简介
- ksu7对讲机调频软件_对讲机写频教程通用版:写频软件的正确操作流程
- [转载]北京的六条经典徒步线路
- 电子通讯录(文件保存版)
- 升级到Chipmunk(2021.2.1)版本 遇到Run按钮不可用
- 「读书笔记」余生,请多指教
- 基于Ubuntu9.10 雨林木风Linux Y1.5发布
- Linux下的gedit复制粘贴问题
热门文章
- VSCode无法跳转到外部函数定义
- Java中的其他常用类(Math类,Scanner类、正则表达式)
- 连接公司办公 快速连接公司协同办公的20款必备软件
- matlab两个力的合成与分解,[转帖]小波图像分解与合成(例子) - Matlab讨论区 - 振动论坛 动力学,噪声 -......
- 使用Python根据视频链接下载MP4视频
- lol选英雄显示服务器,lol卡在选人界面怎么回事 lol卡在选英雄界面怎么办
- 写在25岁的人生边上
- qq游戏大厅中解析不安装apk的研究
- groupby分组聚合和运算2
- 无法启动此程序因为计算机中丢失msvcp140d,msvcp140.dll文件丢失修复工具