BookReptile.exe是一款用go语言写的某书屋爬虫,有代码,有成品,大家笑纳,今天写了一个书屋的爬虫,献给爱读书的朋友们,该网站有两种下载页,一个城通,一个百度云,城通没有密码,百度云含密码,才学go语言,所以没有去重功能,每次会重新新建txt文档,之前爬好的数据,注意保存哦.
爬取书名+下载网址+密码
这是单线程的,多线程,
多线程,直接go working(i)即可.
再加入channel通知主go程退出即可

package main
import (
"fmt"
"io"
"net/http"
"os"
"regexp"
"strconv"
"strings"
)
var count int
func main() {
var start, end int
fmt.Print("起始页(>=1):")
fmt.Scan(&start)
fmt.Print("终止页(>=起始页[适度爬取,太多小心IP被封哦]):")
fmt.Scan(&end)
//创建文件
fc,err:=os.Create("BookList.txt")
if err!=nil{
fmt.Println("os.Create err",err)
return
}
fc.Close()
//循环读取每一页
for i := start; i <= end; i++ {
working(i)
}
fmt.Println("爬取完毕,马上闪开!!!")
}
func working(idx int) {
//打开文件
fo,err:=os.OpenFile("BookList.txt",os.O_APPEND,6)
if err!=nil{
fmt.Println("os.OpenFile err",err)
return
}
defer fo.Close()
url := "https://www.bukebook.cn/page/" + strconv.Itoa(idx)
result, err := httpGet(url, idx)
if err != nil {
fmt.Println("检查网络,或者IP被封了...")
return
}
//正则处理信息获得bookID
//正则规则
bookIDRule :=`class="greatwp-fp04-post-title"><a href="https://www.bukebook.cn/([0-9]+).html" rel="bookmark">`
bookNameRule := `.html">《(?s:(.*?))</a></h2>`
CTUrlRule := `<a class="ordown-button" href="(?s:(.*?))" target="_blank">城通网盘</a>`
psdRule := `<strong>提取秘钥: </strong>(?s:(.*?)) </br>`
allID:=regexpData(result, bookIDRule)
for i,tmpID:=range allID{
bookID:=tmpID[1]
//拼接下载页URL
dlUrl:="https://www.bukebook.cn/wp-content/plugins/ordown/down.php?id="+bookID
//访问下载页
dlResult,err:=httpGet(dlUrl,i)
if err!=nil{
fmt.Println("dl httpGet err",err)
return
}
//处理数据获取书名,下载地址及密码
allBookName:=regexpData(dlResult,bookNameRule)
allCTUrl:=regexpData(dlResult,CTUrlRule)
allPsd:=regexpData(dlResult,psdRule)
//fmt.Println(dlResult)
for _,tmpBookName:=range allBookName{
bookName:=tmpBookName[1]
//判断网盘类型
if strings.Contains(dlResult,"百度云盘"){
count++
//封装百度网盘URL
BDUrl:="https://www.bukebook.cn/wp-content/plugins/ordown/download1.php?id="+bookID
//获取网盘密码
for _,tmpPsd:=range allPsd{
//存储书名及城通地址
fo.Write([]byte(strconv.Itoa(count)+".《"+bookName+"\n"+BDUrl+" "+tmpPsd[1]+"\n"))
fmt.Println("《"+bookName+" 完成\n")
}
}else{
count++
//获取城通网址
for _,tmpCTUrl:=range allCTUrl{
//存储书名及城通地址
fo.Write([]byte(strconv.Itoa(count)+".《"+bookName+"\n"+tmpCTUrl[1]+"\n"))
fmt.Println("《"+bookName+" 完成\n")
}
}
}
}
}
func regexpData(data, rule string) [][]string {
reg := regexp.MustCompile(rule)
return reg.FindAllStringSubmatch(data, -1)
}
func httpGet(url string, idx int) (result string, err error) {
resp, err1 := http.Get(url)
if err1 != nil {
err = err1
return
}
defer resp.Body.Close()
buf := make([]byte, 4096)
for {
n, err2 := resp.Body.Read(buf)
if n == 0 {
break
}
if err2 != nil && err2 != io.EOF {
err = err2
return
}
result += string(buf[:n])
}
return
}
开发者其他应用

简单搜索43.8M30201人在玩简单搜索是一款手机上的搜索引擎,在简单搜索中给用户可以智能高效的搜到自己想搜的内容哦,其中简单搜索在功能体验上还是很不错的,有需要上网的用户快来西西简单搜索专区下载
下载
腾讯体育app最新版224.1M42099人在玩腾讯体育app最新版是腾讯体育平台推出的一款便捷的手机体育直播app。通过这款腾讯体育app,你可以观看赛事直播,也能第一时间了解最新体育新闻动态。
下载
看点快报app40.3M1048人在玩天天快报app是一款生活娱乐应用,天天快报app每日为用户推送有趣的娱乐搞笑段子,同时你可以对文章及图片进行评论,有不少内涵的神吐糟回复,还能在在图片中加入贴图与文字
下载
猎豹浏览器手机版23.0M26398人在玩猎豹浏览器手机版以极速和炫酷为主要特色,重点突出手机观看视频功能,首次在手机浏览器上实现支持快播与百度影音。猎豹浏览器手机版更省流量、更安全、更智能
下载
百度安卓版133.7M11270人在玩手机百度是一款有6亿用户在使用的手机搜索客户端,依托百度网页、百度图片、百度新闻、百度知道、百度百科、百度地图、百度音乐、百度视频等专业垂直搜索频道,方便用户随时随地使用百度搜索服务。
下载
2345浏览器手机版54.6M582人在玩2345浏览器具有智能广告拦截、网页多标签浏览、超级拖拽、鼠标手势、上网痕迹清除、老板键等多项网页浏览实用功能。功能特性收藏夹随身携带网站网址随身携带不丢失,注册登录2345帐号。
下载
凤凰新闻80.3M8934人在玩凤凰新闻客户端是一款优秀的新闻阅读客户端,第一时间奉献最新最有价值的新闻!依托凤凰卫视、凤凰网独家新闻资讯优势,每天24小时精心呈现全方位新闻讯息。
下载
腾讯微云42.3M561人在玩腾讯微云下载,微云可以让PC和手机文件可进行无线传输并实现同步,让手机中的照片自动传送到PC,并可向朋友们共享,功能和苹果的iCloud较为类似。
下载
chrome谷歌浏览器手机版222.5M38380人在玩谷歌浏览器手机版下载安装到手机桌面是通用于android4.0以上平板电脑和手机设备上的chrome浏览器,GoogleChrome浏览器不仅在桌面设备上表现卓越,在Android手机和平板电脑上也可让您
下载
百度贴吧安卓版2022最新版58.1M7231人在玩西西最喜欢用百度贴吧安卓版下载安装最新版看小说,热门小说更新及时,而且是文字版,有手机看更方便,可以随时看。百度贴吧客户端抢楼更快捷,随心所欲发图片,还有更多贴吧豆奖励哦!更快升级速度!
下载