万维网网络机器人,又称蜘蛛,爬虫,原理主要是通过构造符合HTTP协议的网络数据包,向指定主机请求资源,获取返回的数据.万维网有大量的公开信息,人力采集数据费时费力,故激发了爬虫的产业化. 批量获取公开网络数据并不违反,但由于无差别性,无节制,十分暴力的手段会导致对方服务的不稳定,因此,大部分资源提供商对数据包进行了某些过滤,在此背景下,小批量数据获取成为了难题. 综合各种需求,如各种API对接,自动化测试等原理均一样,故开发了此爬虫库.
土拨鼠爬虫库是一个人类友好姿势的代码库,开发采用面向对象的方式,易于理解.通过对Golang原生HTTP库的封装,帮用户处理了一些琐碎逻辑(如收集信息,检测参数),并加入了一些容错机制(如加锁,及时关闭流),保证了爬虫高并发的安全. 此库提供了大量优美的API接口,复用率高,十分方便地支持Cookie接力,爬虫代理设置,以及一般的HTTP请求设置如头部设置,超时,暂停设置,数据设置等,支持全部的HTTP方法如POST/PUT/GET/DELETE等,内置爬虫池和浏览器UA池,易于开发多UA多Cookie分布式爬虫. 此外,还提供第三方存储库,支持mysql/postgresql/redis/cassandra/hbase等.该库简单实用,短短几行代码即可取代以往杂乱无章的面包条代码片段,已经应用在某些大项目中:如大型亚马逊分布式爬虫(美国/日本/德国/英国),经受住两千代理IP超长时间高并发的考验,单台机器每天获取上百万数据.
该库主要用途: 微信开发/API对接/自动化测试/抢票脚本/网站监控/点赞插件/数据爬取
如何使用:
1.获取库.
go get -v github.com/hunterhug/marmot/miner
2.简单使用.
package main // 示例 import ( "fmt" "github.com/hunterhug/marmot/miner" ) func main() { // 1.新建一个矿工 worker, _ := miner.New(nil) // 2.设置网址 worker.SetUrl("http://www.cjhug.me").SetUa(worker.RandomUa()).SetMethod(worker.GET) // 3.抓取网址 html, err := worker.Go() if err != nil { fmt.Println(err.Error()) } // 4.打印内容,等同于fmt.Println(worker.ToString()) fmt.Println(string(html)) }
3.具体使用如下.
使用特别简单,先`New`一个`Worker`, 即土拨鼠矿工, 然后`SetUrl`,适当加头部,最后`worker.Go()`即可。 ### 第一步 矿工有三种类型: 1. `worker, err := miner.NewWorker("http://smart:smart2016@104.128.121.46:808") ` // 代理IP矿工 默认自动化Cookie接力 格式:`协议://代理帐号(可选):代理密码(可选)@ip:port`, 支持http(s),socks5, 别名函数`New()` 2. `worker, err := miner.NewWorker(nil)` // 正常矿工 默认自动化Cookie接力 别名函数`New()` 3. `worker, err := miner.NewAPI()` // API矿工 默认Cookie不接力 ### 第二步 模拟矿工设置头部: 1. `worker.SetUrl("http://www.cjhug.me")` // 设置Http请求要抓取的网址,必须 2. `worker.SetMethod(miner.GET)` // 设置Http请求的方法:`POST/GET/PUT/POSTJSON`等 3. `worker.SetWaitTime(2)` // 设置Http请求超时时间 4. `worker.SetUa(miner.RandomUa())` // 设置Http请求浏览器标志,本项目提供445个浏览器标志,可选设置 5. `worker.SetRefer("http://www.baidu.com")` // 设置Http请求Refer头 6. `worker.SetHeaderParm("diyheader", "lenggirl")` // 设置Http请求自定义头部 7. `worker.SetBData([]byte("file data"))` // Http请求需要上传数据 8. `worker.SetFormParm("username","jinhan")` // Http请求需要提交表单 9. `worker.SetCookie("xx=dddd")` // Http请求设置cookie, 某些网站需要登录后F12复制cookie ### 第三步 矿工启动方式有: 1. `body, err := worker.Go()` // 如果设置SetMethod(),采用下方对应的方法,否则Get() 2. `body, err := worker.Get()` // 默认 3. `body, err := worker.Post()` // POST表单请求,数据在SetFormParm() 4. `body, err := worker.PostJSON()` // 提交JSON请求,数据在SetBData() 5. `body, err := worker.PostXML()` // 提交XML请求,数据在SetBData() 6. `body, err := worker.PostFILE()` // 提交文件上传请求,数据在SetBData() 7. `body, err := worker.Delete()` 8. `body, err := worker.Put()` 9. `body, err := worker.PutJSON()` 10. `body, err := worker.PutXML()` 11. `body, err := worker.PutFILE()` 12. `body, err := worker.OtherGo("OPTIONS", "application/x-www-form-urlencoded")` // 其他自定义的HTTP方法 ### 第四步 爬取到的数据: 1. `fmt.Println(string(html))` // 每次抓取后会返回二进制数据 2. `fmt.Println(worker.ToString())` // http响应后二进制数据也会保存在矿工对象的Raw字段中,使用ToString可取出来 3. `fmt.Println(worker.JsonToString())` // 如果获取到的是JSON数据,请采用此方法转义回来,不然会乱码 注意:每次抓取网站后,下次请求你可以覆盖原先的头部,但是没覆盖的头部还是上次的,所以清除头部或请求数据,请使用`Clear()`(只清除Post数据)或者`ClearAll()`(还清除http头部)
更多细节请到代码仓库...
1、导入相关jar包 2、修改web.xml <?xml version="1.0" encoding="UTF-8"?> ttp://java.sun.com/dtd/web-app_2_3.dtd">http://java.sun.com/dtd/web-app_2_3.dtd"> <!-- Spring Configures --> contextConfigLocati
简述 目前很多软件公司的系统架构为了实现自己的业务逻辑层与实现代码的解藕,以及很多系统存在着大量第三方产品的集成工作,使得大家都不约而同的选用了Spring这种轻量的、灵活可配的框架,Spring作为一个成熟的、被广泛认可的IOC框架在dorado的marmot架构中也得到了很好的支持,详细说明参考<>。Dorado的UpdateCommand对象一般默认都是直接向视图模型的实现类发出请求,并调用
题意:每组共4个点,4个点分别有起始坐标和轴心坐标,每个点每次都可以绕自己的轴心坐标90°,问能否用最少次数内4个点组成一个正方形,若能则输出最少次数,否则输出-1。 每个点有4个方位可以选择,共4个点,4 * 4 * 4 * 4 = 256种,暴力即可 #include<cstdio> #include<cstring> #include<cstdlib> #include<cctype> #i
题目链接:http://codeforces.com/contest/474/my Captain Marmot wants to prepare a huge and important battle against his enemy, Captain Snake. For this battle he has n regiments, each consisting of 4 moles.
C. Captain Marmot time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output Captain Marmot wants to prepare a huge and important battle against his e
4*4*4*4暴力+点的旋转+判断正方型 C. Captain Marmot time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output Captain Marmot wants to prepare a huge and important
C. Captain Marmot time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output Captain Marmot wants to prepare a huge and important battle against his e
Captain Marmot wants to prepare a huge and important battle against his enemy, Captain Snake. For this battle he has n regiments, each consisting of 4 moles. Initially, each mole i (1 ≤ i ≤ 4n) is pla
题目: LINK 给定4个点 和每个点可以围绕转动的中心点的坐标, 每个点可以逆时针每次转动90度, 问4个点是否可以通过转动后的位置组成一个正方形,如果可以输出最少的转动次数和, 否则-1. 思路没有什么难的, 暴力直接做,O(4^4*n); 注意两点:1, 结果中间坐标距离的平方会超int, 最大 (4e4)^2 * 2 ,开始竟然算的是max = 8e8.不要吝惜用LL 2, 判断四个点是
题意:每组共4个点,4个点分别有起始坐标和轴心坐标,每个点每次都可以绕自己的轴心坐标90°,问能否用最少次数内4个点组成一个正方形,若能则输出最少次数,否则输出-1。 每个点有4个方位可以选择,共4个点,4 * 4 * 4 * 4 = 256种,暴力即可 #include<cstdio> #include<cstring> #include<cstdlib> #include<cc
Captain Marmot Time Limit:1000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Submit Status Description Captain Marmot wants to prepare a huge and important battle against his enemy, C
url:marmot/query/query-box.jsp view: org.marmot.framework.query.view.QueryBox tabsetQuery 对象的事件 <afterTabChange> 代码中添加 以下代码 用于过滤不想用于查询的字段 if(field.getTag() == 'hide') { continue; } i
传送门:cf 474c C. Captain Marmot time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output Captain Marmot wants to prepare a huge and important battle a
C. Captain Marmot time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output Captain Marmot wants to prepare a huge and important battle against his e
土拨鼠影音为IPTV用户提供了更多(少)的选择: 不用再切换信号源 不用再更换换遥控器 直接在现有安卓盒子或电视上观看 特性: 频道列表导入(Web界面或直接调用API) udpxy支持 有以下几点需要注意: 本软件仅适用于已经开通了IPTV的用户 IPTV对网络配置有一定要求,请访问官网加入社区讨论 未来计划: 回看功能 手机端播放器 手机遥控器
游戏玩法就像电影《土拨鼠之日》。 发展你的事业和个性。重复。为什么?你得弄清楚。
有的时候,当我们的爬虫程序完成了,并且在本地测试也没有问题,爬取了一段时间之后突然就发现报错无法抓取页面内容了。这个时候,我们很有可能是遇到了网站的反爬虫拦截。 我们知道,网站一方面想要爬虫爬取网站,比如让搜索引擎爬虫去爬取网站的内容,来增加网站的搜索排名。另一方面,由于网站的服务器资源有限,过多的非真实的用户对网站的大量访问,会增加运营成本和服务器负担。 因此,有些网站会设置一些反爬虫的措施。我
这一章将会介绍使用一些新的模块(optparse,spider)去完成一个爬虫的web应用。爬虫其实就是一个枚举出一个网站上面的所有链接,以帮助你创建一个网站地图的web应用程序。而使用Python则可以很快的帮助你开发出一个爬虫脚本. 你可以创建一个爬虫脚本通过href标签对请求的响应内容进行解析,并且可以在解析的同时创建一个新的请求,你还可以直接调用spider模块来实现,这样就不需要自己去写
根据使用场景,网络爬虫可分为 通用爬虫 和 聚焦爬虫 两种. 通用爬虫 通用网络爬虫 就是 捜索引擎抓取系统,目的是将互联网上的所有的网页下载到本地,形成一个互联网内容的镜像备份。 它决定着整个搜索引擎内容的丰富性和时效性,因此它的性能优劣直接影响着搜索引擎的效果。 通用搜索引擎(Search Engine)工作原理 第一步:抓取网页 搜索引擎网络爬虫的基本工作流程如下: 首先选取一部分的初始UR
爬虫项是什么呢?比如采集文章列表、文章详情页,他们都是不同的采集项。 定义示例: 继承Yurun\Crawler\Module\Crawler\Contract\BaseCrawlerItem类。 <?php namespace Yurun\CrawlerApp\Module\YurunBlog\Article; use Imi\Bean\Annotation\Bean; use Yurun\C