实例介绍
Pickaxe是一个强大的命令行工具,它允许用户通过结合SQL语句和CSS选择器来从网页中提取所需的文本信息。如果你对SQL和CSS选择器有一定的了解,那么这个工具非常适合你。
Pickaxe可以在Linux、MacOS和Windows上运行。最快的开始方式是如果已经安装了Docker,运行以下命令:
docker run -it bitsummation/pickaxe /bin/bash
一旦安装完成或Docker镜像正在运行,你可以通过输入pickaxe来启动它。如果没有给出任何参数,它将以交互模式运行,允许你在提示符下输入代码,输入分号后代码将被执行。你也可以传递源代码的文件位置或者网络上的源地址。Pickaxe使用类似SQL的语句来从网页中选择文本。与其它工具不同的是,这些SQL语句不是针对数据库执行,而是针对实时网页执行。例如,你可以通过以下方式下载整个网页,并通过where子句选择感兴趣的节点:
select *
from download page 'https://www.faa.gov/air_traffic/weather/asos/?state=TX'
where nodes = 'table.asos tbody tr'
此外,Pickaxe还支持嵌套下载选择、下载线程以加快速度、使用代理、存储结果(内存、文件、SQL数据库)等高级功能,使得从网页中提取数据变得更加灵活和高效。对于需要客户端JavaScript渲染的页面,Pickaxe提供了简单的js提示以适应这种情况,尽管性能会有所下降。例如,你可以指定要等待的HTML元素,直到JavaScript渲染该元素,并设置超时时间(以秒为单位)。
Pickaxe还允许运行JavaScript代码来处理下载的页面,使得从复杂的网页结构中提取数据变得可能。此外,还支持子查询、匹配和替换文本、更新表、下载图片、使用变量、生成URLs、内部连接表等多种高级功能,极大地扩展了从网页中提取数据的可能性。
总之,Pickaxe是一个功能强大的工具,适用于需要从网页中提取特定数据的开发者和数据分析师。
【实例截图】
【核心代码】
文件清单
└── pickaxe-1583837156343f4a52f42b8972c27731760e96d4
├── Binaries
│ └── Antlr
│ ├── antlr-3.5.2.jar
│ ├── Antlr3.Runtime.dll
│ └── LICENSE.txt
├── build.bat
├── Dockerfile.contained
├── Dockerfile.dev
├── Dockerfile.framework
├── Examples
│ ├── awos.s
│ ├── georgetown-airport.s
│ ├── heb.s
│ ├── LakeTravisWaterLevel.s
│ ├── nfl-divisions.s
│ ├── PgaLeaderboard.s
│ ├── stocks.s
│ ├── walmart-category.s
│ ├── walmart.s
│ └── youtube.s
├── LICENSE
├── Pickaxe.CodeGen
│ ├── CodeDomArg.cs
│ ├── CodeDomMethodArg.cs
│ ├── CodeDomTypeDefinition.cs
│ ├── Extensions.cs
│ ├── IScopeData.cs
│ ├── Pickaxe.CodeGen.csproj
│ ├── Scope.cs
│ ├── ScopeData.cs
│ ├── SelectArgsInfo.cs
│ ├── SelectMatch.cs
│ ├── SelectScope.cs
│ ├── Semantic
│ │ ├── AmbiguousSelectVariable.cs
│ │ ├── BadCssSelector.cs
│ │ ├── BadProxyFormat.cs
│ │ ├── DownloadRequirestring.cs
│ │ ├── FileTableImmutable.cs
│ │ ├── InsertSelectArgsNotEqual.cs
│ │ ├── LineInfo.cs
│ │ ├── NoColumnName.cs
│ │ ├── NoDirectory.cs
│ │ ├── NoTableMember.cs
│ │ ├── NotTableRowVariableException.cs
│ │ ├── NotTableVariableException.cs
│ │ ├── OnlyTwoSelectParamForDirectory.cs
│ │ ├── SelectNoColumnsFound.cs
│ │ ├── SemanticException.cs
│ │ ├── UnknownSelectVariableException.cs
│ │ ├── UnknownVariableReferenceException.cs
│ │ └── VariableAlreadyExists.cs
│ └── Visitor
│ ├── Visitor.AdditionOperator.cs
│ ├── Visitor.AndExpression.cs
│ ├── Visitor.AsExpression.cs
│ ├── Visitor.Block.cs
│ ├── Visitor.BufferTable.cs
│ ├── Visitor.CaseBooleanStatement.cs
│ ├── Visitor.CaseExpression.cs
│ ├── Visitor.CaseVariableStatement.cs
│ ├── Visitor.CodeDomGenerator.cs
│ ├── Visitor.CommandLineVariable.cs
│ ├── Visitor.DivisionOperator.cs
│ ├── Visitor.DownloadImageExpression.cs
│ ├── Visitor.DownloadPageExpression.cs
│ ├── Visitor.EachStatement.cs
│ ├── Visitor.EqualsExpression.cs
│ ├── Visitor.ExpandExpression.cs
│ ├── Visitor.ExpandIterationVariable.cs
│ ├── Visitor.FileTable.cs
│ ├── Visitor.FloatLiteral.cs
│ ├── Visitor.FromStatement.cs
│ ├── Visitor.GetDatePrimitive.cs
│ ├── Visitor.GreaterThanEqualExpression.cs
│ ├── Visitor.GreaterThanExpression.cs
│ ├── Visitor.IdentityVariable.cs.cs
│ ├── Visitor.InnerJoinStatement.cs
│ ├── Visitor.InsertIntoDirectoryStatement.cs
│ ├── Visitor.InsertIntoStatement.cs
│ ├── Visitor.InsertOverwriteStatement.cs
│ ├── Visitor.IntegerLiteral.cs
│ ├── Visitor.JavascriptCode.cs
│ ├── Visitor.JSTableHint.cs
│ ├── Visitor.LessThanEqualExpression.cs
│ ├── Visitor.LessThanExpression.cs
│ ├── Visitor.LikeExpression.cs
│ ├── Visitor.MsSqlTable.cs
│ ├── Visitor.MultiplicatonOperator.cs
│ ├── Visitor.NestedSelectStatement.cs
│ ├── Visitor.NodesBooleanExpressionStub.cs
│ ├── Visitor.NotEqualExpression.cs
│ ├── Visitor.NotLikeExpression.cs
│ ├── Visitor.NullLiteral.cs
│ ├── Visitor.NullOperator.cs
│ ├── Visitor.OrExpression.cs
│ ├── Visitor.PickStatement.cs
│ ├── Visitor.ProcedureCall.cs
│ ├── Visitor.ProcedureDefinition.cs
│ ├── Visitor.Program.cs
│ ├── Visitor.ProxyList.cs
│ ├── Visitor.ProxyStatement.cs
│ ├── Visitor.SelectAll.cs
│ ├── Visitor.SelectArg.cs
│ ├── Visitor.SelectId.cs
│ ├── Visitor.SelectStatement.cs
│ ├── Visitor.StringLiteral.cs
│ ├── Visitor.SubtrationOperator.cs
│ ├── Visitor.TableAlias.cs
│ ├── Visitor.TableColumnArg.cs
│ ├── Visitor.TableMemberReference.cs
│ ├── Visitor.TableVariableReference.cs
│ ├── Visitor.TableVariableRowGetter.cs
│ ├── Visitor.TableVariableRowReference.cs
│ ├── Visitor.TakeAtrributeStatement.cs
│ ├── VisitorTakeHtmlStatement.cs
│ ├── VisitorTakeTextStatement.cs
│ ├── Visitor.ThreadTableHint.cs
│ ├── Visitor.TruncateTableStatement.cs
│ ├── Visitor.UpdateStatement.cs
│ ├── Visitor.VariableAssignmentStatement.cs
│ ├── Visitor.VariableDeclarationStatement.cs
│ ├── Visitor.VariableReference.cs
│ ├── Visitor.WhenBooleanStatement.cs
│ ├── Visitor.WhenLiteralStatement.cs
│ ├── Visitor.WhereStatement.cs
│ └── Visitor.WhileStatement.cs
├── Pickaxe.Console
│ ├── ConsoleAppender.cs
│ ├── Interactive.cs
│ ├── Log4Net.config
│ ├── Pickaxe.Console.csproj
│ ├── Program.cs
│ ├── Runner.cs
│ └── runtimeconfig.template.json
├── Pickaxe.Emit
│ ├── AssemblyGenerator.cs
│ ├── Compiler.cs
│ └── Pickaxe.Emit.csproj
├── Pickaxe.Parser
│ ├── Antlr
│ │ ├── AntlrLexer.cs
│ │ ├── AntlrParser.cs
│ │ ├── Scrape.g
│ │ ├── ScrapeLexer.cs
│ │ ├── ScrapeParser.cs
│ │ └── Scrape.tokens
│ ├── Bridge
│ │ ├── AntlrBridgeTree.cs
│ │ ├── BridgeBase.cs
│ │ ├── BridgeVisitor.cs
│ │ └── IBridgeVisitor.cs
│ ├── CodeParser.cs
│ ├── LineInfo.cs
│ ├── ParseException.cs
│ └── Pickaxe.Parser.csproj
├── Pickaxe.Runtime
│ ├── AngleSharp
│ │ ├── AngleSharpDoc.cs
│ │ ├── AngleSharpElement.cs
│ │ └── AngleSharpFactory.cs
│ ├── BufferTable.cs
│ ├── CodeTable.cs
│ ├── Config.cs
│ ├── Debug
│ │ ├── BreakProcesser.cs
│ │ ├── IBreak.cs
│ │ └── IDebug.cs
│ ├── Dom
│ │ ├── CacheElement.cs
│ │ ├── DomFactory.cs
│ │ ├── HtmlDoc.cs
│ │ └── HtmlElement.cs
│ ├── DownloadedNodes.cs
│ ├── DownloadError.cs
│ ├── DownloadImage.cs
│ ├── DownloadPage.cs
│ ├── DynamicObject.cs
│ ├── DynamicObjectDownloadTable.cs
│ ├── DynamicObjectWrapper.cs
│ ├── Expand.cs
│ ├── Extensions.cs
│ ├── FileTable.cs
│ ├── Helper.cs
│ ├── Http.cs
│ ├── IHttpRequest.cs
│ ├── IHttpRequestFactory.cs
│ ├── IHttpWire.cs
│ ├── Internal
│ │ ├── HttpProxySelector.cs
│ │ ├── HttpRequest.cs
│ │ ├── HttpRequestFactory.cs
│ │ ├── HttpWire.cs
│ │ ├── ProxyHttpRequest.cs
│ │ ├── ProxyHttpRequestSelector.cs
│ │ ├── ProxySelector.cs
│ │ ├── RetryHttpRequest.cs
│ │ ├── SeleniumExecJsHttpWire.cs
│ │ ├── SeleniumHttpWire.cs
│ │ └── WebRequestHttpWire.cs
│ ├── IRow.cs
│ ├── IRowReader.cs
│ ├── IRowWriter.cs
│ ├── IRuntime.cs
│ ├── LazyDownloadArgs.cs
│ ├── LazyDownloadPage.cs
│ ├── MsSqlTable.cs
│ ├── Pickaxe.Runtime.csproj
│ ├── PrimitiveFunctions.cs
│ ├── ProgressArgs.cs
│ ├── Proxy.cs
│ ├── ResultRow.cs
│ ├── Runable.cs
│ ├── RuntimeBase.cs
│ ├── RuntimeTable.cs
│ ├── SelectDownloadPage.cs
│ ├── SelectDownloadTable.cs
│ ├── Table.cs
│ ├── TableDescriptor.cs
│ ├── TablePrimitive.cs
│ ├── ThreadedDownloadTable.cs
│ ├── VariableDownloadPage.cs
│ ├── VariableDownloadTable.cs
│ └── VariableTypePair.cs
├── Pickaxe.Sdk
│ ├── AdditionOperator.cs
│ ├── AliasBase.cs
│ ├── AndExpression.cs
│ ├── AsExpression.cs
│ ├── AstNode.cs
│ ├── Block.cs
│ ├── BooleanExpression.cs
│ ├── BufferTable.cs
│ ├── CaseBooleanStatement.cs
│ ├── CaseExpression.cs
│ ├── CaseVariableStatement.cs
│ ├── ChildCollection.cs
│ ├── CommandLineVariable.cs
│ ├── DivisionOperator.cs
│ ├── DownloadImageExpression.cs
│ ├── DownloadPageExpression.cs
│ ├── EachStatement.cs
│ ├── EqualsExpression.cs
│ ├── ExpandExpression.cs
│ ├── ExpandIterationVariable.cs
│ ├── FileTable.cs
│ ├── FloatLiteral.cs
│ ├── FromStatement.cs
│ ├── GetDatePrimitive.cs
│ ├── GreaterThanEqualExpression.cs
│ ├── GreaterThanExpression.cs
│ ├── IAstVisitor.cs
│ ├── IdentityVariable.cs
│ ├── InnerJoinStatement.cs
│ ├── InsertIntoDirectoryStatement.cs
│ ├── InsertIntoStatement.cs
│ ├── InsertOverwriteStatement.cs
│ ├── IntegerLiteral.cs
│ ├── JavascriptCode.cs
│ ├── JSTableHint.cs
│ ├── LessThanEqualExpression.cs
│ ├── LessThanExpression.cs
│ ├── LikeExpression.cs
│ ├── LineInfo.cs
│ ├── MatchExpression.cs
│ ├── MsSqlTable.cs
│ ├── MultiplicatonOperator.cs
│ ├── NestedSelectStatement.cs
│ ├── NodesBooleanExpression.cs
│ ├── NotEqualExpression.cs
│ ├── NotLikeExpression.cs
│ ├── NullLiteral.cs
│ ├── NullOperator.cs
│ ├── OrExpression.cs
│ ├── Pickaxe.Sdk.csproj
│ ├── PickStatement.cs
│ ├── ProcedureCall.cs
│ ├── ProcedureDefinition.cs
│ ├── Program.cs
│ ├── ProxyList.cs
│ ├── ProxyStatement.cs
│ ├── ReplaceExpression.cs
│ ├── SelectAll.cs
│ ├── SelectArg.cs
│ ├── SelectId.cs
│ ├── SelectStatement.cs
│ ├── StringLiteral.cs
│ ├── SubtrationOperator.cs
│ ├── TableAlias.cs
│ ├── TableColumnArg.cs
│ ├── TableMemberReference.cs
│ ├── TableVariableReference.cs
│ ├── TableVariableRowGetter.cs
│ ├── TableVariableRowReference.cs
│ ├── TakeAttributeStatement.cs
│ ├── TakeHtmlStatement.cs
│ ├── TakeTextStatement.cs
│ ├── ThreadTableHInt.cs
│ ├── TruncateTableStatement.cs
│ ├── UpdateSetArgs.cs
│ ├── UpdateStatement.cs
│ ├── VariableAssignmentStatement.cs
│ ├── VariableDeclarationStatement.cs
│ ├── VariableReferance.cs
│ ├── WhenBooleanStatement.cs
│ ├── WhenLiteralStatement.cs
│ ├── WhereStatement.cs
│ └── WhileStatement.cs
├── Pickaxe.sln
├── Pickaxe.Tests
│ ├── CodeGen.cs
│ ├── CommandArgTests.cs
│ ├── EachTests.cs
│ ├── ExpandTests.cs
│ ├── JoinTests.cs
│ ├── NestedSelectTests.cs
│ ├── Pickaxe.Tests.csproj
│ ├── PrimitiveFunctionTests.cs
│ ├── ProcedureCallTests.cs
│ ├── ProcedureTests.cs
│ ├── RunJavascriptTest.cs
│ ├── SelectTests.cs
│ ├── TestCode.cs
│ ├── TestHelper.cs
│ ├── Test.html
│ ├── UpdateTests.cs
│ ├── WhereTests.cs
│ └── WhileTests.cs
└── README.md
19 directories, 311 files
标签:
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论