go语言,爬取百度贴吧指定贴所有内容
初级爬虫,为了学习一下常用的goquery。
goquery 配置
go get https://github.com/PuerkitoBio/goquery
会提示不支持https方式
解决方案:
mkdir -p $GOPATH/src/golang.org/x
cd $GOPATH/src/golang.org/x
git clone https://github.com/golang/net.git
获取net 包后,应该就可以使用了
或者通过clone获取goquery
git clone git@github.com:PuerkitoBio/goquery.git
我的goquery在$GOPATH/src/github.com/PuerkitoBio/goquery
使用的时候直接
import "github.com/PuerkitoBio/goquery"
goquery 使用
据说和jQuery类似。
待补吧。算是督促下进度。
1.解析操作的学习 (完成)
2.如果遍历dom树如何避开陷阱 (完成) 规划路线
3.分离 贴子中楼层,楼中楼。贴子有唯一ID 已经体现在url中。 楼和楼中楼应该也有唯一ID。
4.回复中有图片的情况,下载or跳过。
5.作为解析器,如何融入项目
func GetUrlDocAndRetNxtUrl(){
file := "urltxt"
fout,err := os.Create(file)
defer fout.Close()
if err!=nil{
fmt.Println(file,err)
return
}
doc,err := goquery.NewDocument("https://tieba.baidu.com/p/5976430861")
//创建了html的dom对象。
if err!=nil{
log.Fatal(err)
}
//通过find a标签中的下一页 。
//或者直接构造 oldurl?pn=pagenum 即可 。
return nxturl;
}
还没有测试。。
测试好的代码如下,网页格式在注释。
开始时候忘记了CSS class 空格分隔时 表示有多个class属性,误以为是一种带有空格的class属性,浪费了很多时间。
未区分错误和到达尾页情况 待补。
不应该每次通过url创建对象,多一次访问,性能浪费。应该设置传入对象。待补。
也可以通过网页的返回文档构造对象,然后再去进行解析操作。
response, err := http.Get(url)
//使用goquery解析response响应体获得html文档
doc err := goquery.NewDocumentFromReader(response.Body)
package parse
import (
"fmt"
"github.com/PuerkitoBio/goquery"
"os"
"log"
// "strings"
)
func GetUrlDocAndRetNxtUrl(url string) string{
if url == ""{
url = "https://tieba.baidu.com/p/5976430861"
}
file := "urltxt"
fout,err := os.Create(file)
defer fout.Close()
if err!=nil{
fmt.Println(file,err)
return ""
}
doc,err := goquery.NewDocument(url)
//创建了html的dom对象。
if err!=nil{
log.Fatal(err)
return ""
}
fmt.Println("html-text-page_list:\n")
//fmt.Println(doc.Html())
/*
<li class="l_pager pager_theme_4 pb_list_pager">
<span class="tP">1</span>
<a href="/p/5976430861?pn=2">2</a>
<a href="/p/5976430861?pn=3">3</a>
<a href="/p/5976430861?pn=4">4</a>
<a href="/p/5976430861?pn=5">5</a>
<a href="/p/5976430861?pn=6">6</a>
<a href="/p/5976430861?pn=7">7</a>
<a href="/p/5976430861?pn=8">8</a>
<a href="/p/5976430861?pn=9">9</a>
<a href="/p/5976430861?pn=10">10</a>
<a href="/p/5976430861?pn=2">下一页</a>
<a href="/p/5976430861?pn=15">尾页</a>
</li>
*/
fmt.Println(doc.Find(".pb_list_pager").Html())
tmp := doc.Find(".pb_list_pager").Find("a").Eq(-2)//Last().Prev();
//fmt.Println(tmp.Html())
//fmt.Println(tmp.Attr("href"))
if tmp.Text() == "下一页"{
nxturl,err := tmp.Attr("href")//如果找不到 属性 1.尾页,2.页面本身有问题 现在只处理尾页问题
if err!=true{
return ""
}
nxturl = "tieba.baidu.com"+nxturl;
fmt.Println(nxturl) //write file //此处分离楼中楼 和 楼层内容
}
return ""
//通过find a标签中的下一页 。 或者直接构造 ?pn=pagenum 即可 。
}
go语言,爬取百度贴吧指定贴所有内容的更多相关文章
- 爬取百度贴吧前1000页内容(requests库面向对象思想实现)
此程序以李毅吧为例子,以面向对象的设计思想实现爬取保存网页数据,暂时并未用到并发处理,以后有机会的话会加以改善 首先去百度贴吧分析贴吧地址栏中url后的参数,找到分页对应的参数pn,贴吧名字对应的参数 ...
- Python爬虫实例(一)爬取百度贴吧帖子中的图片
程序功能说明:爬取百度贴吧帖子中的图片,用户输入贴吧名称和要爬取的起始和终止页数即可进行爬取. 思路分析: 一.指定贴吧url的获取 例如我们进入秦时明月吧,提取并分析其有效url如下 http:// ...
- Python爬虫实战二之爬取百度贴吧帖子
大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 前言 亲爱的们,教程比较旧了,百度贴吧页面可能改版,可能代码不 ...
- 【学习笔记】Python 3.6模拟输入并爬取百度前10页密切相关链接
[学习笔记]Python 3.6模拟输入并爬取百度前10页密切相关链接 问题描述 通过模拟网页,实现百度搜索关键词,然后获得网页中链接的文本,与准备的文本进行比较,如果有相似之处则代表相关链接. me ...
- 转 Python爬虫实战二之爬取百度贴吧帖子
静觅 » Python爬虫实战二之爬取百度贴吧帖子 大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 本篇目标 ...
- java 如何爬取百度百科词条内容(java如何使用webmagic爬取百度词条)
这是老师所布置的作业 说一下我这里的爬去并非能把百度词条上的内容一字不漏的取下来(而是它分享链接的一个主要内容概括...)(他的主要内容我爬不到 也不想去研究大家有好办法可以call me) 例如 互 ...
- Python爬虫实战之爬取百度贴吧帖子
大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 本篇目标 对百度贴吧的任意帖子进行抓取 指定是否只抓取楼主发帖 ...
- python+selenium+bs4爬取百度文库内文字 && selenium 元素可以定位到,但是无法点击问题 && pycharm多行缩进、左移
先说一下可能用到的一些python知识 一.python中使用的是unicode编码, 而日常文本使用各类编码如:gbk utf-8 等等所以使用python进行文字读写操作时候经常会出现各种错误, ...
- 百度图片爬虫-python版-如何爬取百度图片?
上一篇我写了如何爬取百度网盘的爬虫,在这里还是重温一下,把链接附上: http://www.cnblogs.com/huangxie/p/5473273.html 这一篇我想写写如何爬取百度图片的爬虫 ...
随机推荐
- 微信小程序小结(3) -- 使用wxParse解析html及多数据循环
wxParse-微信小程序富文本解析组件:https://github.com/icindy/wxParse 支持Html及markdown转wxml可视化 使用 1.copy下载好的文件夹wxPar ...
- 洛谷P1962 斐波那契数列
传送门 不难得到状态转移矩阵 然后带进去乱搞 //minamoto #include<iostream> #include<cstdio> #include<cstrin ...
- MySQL 逻辑备份mysqldump&mysqlpump&mydumper原理解析
目录 准备 mysqldump备份 mysqlpump备份 mydumper备份 想弄清除逻辑备份的原理,最好的办法是开启general_log,一探究竟 准备 创建用户 CREATE USER IF ...
- 使用combobox下拉列表框实现省 市 县 的三级联动
package com.hanqi.entity; //地区 public class Region { //地区id private String regionID; //地区名称 private ...
- Java基础笔记(十四)——封装
封装(好比ATM机) 将类的某些信息隐藏在类内部,不允许外部程序直接访问(隐藏对象的信息),通过该类提供的方法来实现对隐藏信息的操作和访问(留出访问的接口). 特点: 1.只能通过规定的方法访问数据. ...
- SVN历史版本比较中文乱码
将Workspace的编码改为UTF-8即可,详见上图:
- LeetCode初级算法(其他篇)
目录 缺失数字 位1的个数 颠倒二进制位 有效的括号 汉明距离 帕斯卡三角形 缺失数字 最初的想法是将0到n全部加起来,再减去输入的数字之和,那么差如果非零的话就是我们所需要的数字.但是一想,可能会发 ...
- Angular学习笔记 ——input 标签上的【name属性】和【ngModelOptions属性】
利用“@angular/forms" 创建<form>表单的时候,系统默认会创建一个”FormGroup"的对象. 使用带有“ngModel"的”<in ...
- BZOJ 4264 小C找朋友 哈希+脑子
好吧我觉得是脑子,别人觉得是套路$qwq$ 这道题相当于是求除了$u,v$两点互相连接,所连的点相同的点对$(u,v)$ 我们首先每个点一个随机权值,对于$u$点记为$w[u]$,然后记与$u$点相连 ...
- js——swiper.js
一款用于PC端和移动端的滑动效果插件. 中文网站:http://www.swiper.com.cn/# 点击中文教程.使用方法 1. initialSlide:初始索引值,从0开始 2.pagin ...