* update to mod enabled version goquery * manually set appengine new releasetags/v1.10.0-rc1
gitea.com/macaron/macaron v1.3.3-0.20190821202302-9646c0587edb | gitea.com/macaron/macaron v1.3.3-0.20190821202302-9646c0587edb | ||||
gitea.com/macaron/session v0.0.0-20190821211443-122c47c5f705 | gitea.com/macaron/session v0.0.0-20190821211443-122c47c5f705 | ||||
gitea.com/macaron/toolbox v0.0.0-20190822013122-05ff0fc766b7 | gitea.com/macaron/toolbox v0.0.0-20190822013122-05ff0fc766b7 | ||||
github.com/PuerkitoBio/goquery v0.0.0-20170324135448-ed7d758e9a34 | |||||
github.com/PuerkitoBio/goquery v1.5.0 | |||||
github.com/RoaringBitmap/roaring v0.4.7 // indirect | github.com/RoaringBitmap/roaring v0.4.7 // indirect | ||||
github.com/andybalholm/cascadia v0.0.0-20161224141413-349dd0209470 // indirect | |||||
github.com/bgentry/speakeasy v0.1.0 // indirect | github.com/bgentry/speakeasy v0.1.0 // indirect | ||||
github.com/blevesearch/bleve v0.0.0-20190214220507-05d86ea8f6e3 | github.com/blevesearch/bleve v0.0.0-20190214220507-05d86ea8f6e3 | ||||
github.com/blevesearch/blevex v0.0.0-20180227211930-4b158bb555a3 // indirect | github.com/blevesearch/blevex v0.0.0-20180227211930-4b158bb555a3 // indirect | ||||
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 | golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 | ||||
golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456 | golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456 | ||||
golang.org/x/text v0.3.2 | golang.org/x/text v0.3.2 | ||||
golang.org/x/tools v0.0.0-20190827205025-b29f5f60c37a // indirect | |||||
golang.org/x/tools v0.0.0-20190828213141-aed303cbaa74 // indirect | |||||
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect | gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect | ||||
gopkg.in/asn1-ber.v1 v1.0.0-20150924051756-4e86f4367175 // indirect | gopkg.in/asn1-ber.v1 v1.0.0-20150924051756-4e86f4367175 // indirect | ||||
gopkg.in/editorconfig/editorconfig-core-go.v1 v1.3.0 | gopkg.in/editorconfig/editorconfig-core-go.v1 v1.3.0 |
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= | github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= | ||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= | github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= | ||||
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= | github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= | ||||
github.com/PuerkitoBio/goquery v0.0.0-20170324135448-ed7d758e9a34 h1:UsHpWO0Elp6NaWVARdZHjiYwkhrspHVEGsyIKPb9OI8= | |||||
github.com/PuerkitoBio/goquery v0.0.0-20170324135448-ed7d758e9a34/go.mod h1:T9ezsOHcCrDCgA8aF1Cqr3sSYbO/xgdy8/R/XiIMAhA= | |||||
github.com/PuerkitoBio/goquery v1.5.0 h1:uGvmFXOA73IKluu/F84Xd1tt/z07GYm8X49XKHP7EJk= | |||||
github.com/PuerkitoBio/goquery v1.5.0/go.mod h1:qD2PgZ9lccMbQlc7eEOjaeRlFQON7xY8kdmcsrnKqMg= | |||||
github.com/RoaringBitmap/roaring v0.4.7 h1:eGUudvFzvF7Kxh7JjYvXfI1f7l22/2duFby7r5+d4oc= | github.com/RoaringBitmap/roaring v0.4.7 h1:eGUudvFzvF7Kxh7JjYvXfI1f7l22/2duFby7r5+d4oc= | ||||
github.com/RoaringBitmap/roaring v0.4.7/go.mod h1:8khRDP4HmeXns4xIj9oGrKSz7XTQiJx2zgh7AcNke4w= | github.com/RoaringBitmap/roaring v0.4.7/go.mod h1:8khRDP4HmeXns4xIj9oGrKSz7XTQiJx2zgh7AcNke4w= | ||||
github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= | github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= | ||||
github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= | github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= | ||||
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= | github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= | ||||
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= | github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= | ||||
github.com/andybalholm/cascadia v0.0.0-20161224141413-349dd0209470 h1:4jHLmof+Hba81591gfH5xYA8QXzuvgksxwPNrmjR2BA= | |||||
github.com/andybalholm/cascadia v0.0.0-20161224141413-349dd0209470/go.mod h1:3I+3V7B6gTBYfdpYgIG2ymALS9H+5VDKUl3lHH7ToM4= | |||||
github.com/andybalholm/cascadia v1.0.0 h1:hOCXnnZ5A+3eVDX8pvgl4kofXv2ELss0bKcqRySc45o= | |||||
github.com/andybalholm/cascadia v1.0.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y= | |||||
github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA= | github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA= | ||||
github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= | github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= | ||||
github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= | github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= | ||||
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= | golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= | ||||
golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= | golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= | ||||
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= | golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= | ||||
golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | |||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | ||||
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | ||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | ||||
golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= | golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= | ||||
golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= | golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= | ||||
golang.org/x/tools v0.0.0-20190729092621-ff9f1409240a/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= | golang.org/x/tools v0.0.0-20190729092621-ff9f1409240a/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= | ||||
golang.org/x/tools v0.0.0-20190827205025-b29f5f60c37a h1:0JEq5ZQ3TgsRlFmz4BcD+E6U6cOk4pOImCQSyIG59ZM= | |||||
golang.org/x/tools v0.0.0-20190827205025-b29f5f60c37a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | |||||
golang.org/x/tools v0.0.0-20190828213141-aed303cbaa74 h1:4cFkmztxtMslUX2SctSl+blCyXfpzhGOy9LhKAqSMA4= | |||||
golang.org/x/tools v0.0.0-20190828213141-aed303cbaa74/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | |||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | ||||
google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= | google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= | ||||
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= | google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= |
language: go | language: go | ||||
go: | go: | ||||
- 1.1.x | |||||
- 1.1 | |||||
- 1.2.x | - 1.2.x | ||||
- 1.3.x | - 1.3.x | ||||
- 1.4.x | - 1.4.x | ||||
- 1.6.x | - 1.6.x | ||||
- 1.7.x | - 1.7.x | ||||
- 1.8.x | - 1.8.x | ||||
- 1.9.x | |||||
- "1.10.x" | |||||
- 1.11.x | |||||
- tip | - tip | ||||
# goquery - a little like that j-thing, only in Go | |||||
[![build status](https://secure.travis-ci.org/PuerkitoBio/goquery.png)](http://travis-ci.org/PuerkitoBio/goquery) [![GoDoc](https://godoc.org/github.com/PuerkitoBio/goquery?status.png)](http://godoc.org/github.com/PuerkitoBio/goquery) [![Sourcegraph Badge](https://sourcegraph.com/github.com/PuerkitoBio/goquery/-/badge.svg)](https://sourcegraph.com/github.com/PuerkitoBio/goquery?badge) | |||||
# goquery - a little like that j-thing, only in Go | |||||
[![build status](https://secure.travis-ci.org/PuerkitoBio/goquery.svg?branch=master)](http://travis-ci.org/PuerkitoBio/goquery) [![GoDoc](https://godoc.org/github.com/PuerkitoBio/goquery?status.png)](http://godoc.org/github.com/PuerkitoBio/goquery) [![Sourcegraph Badge](https://sourcegraph.com/github.com/PuerkitoBio/goquery/-/badge.svg)](https://sourcegraph.com/github.com/PuerkitoBio/goquery?badge) | |||||
goquery brings a syntax and a set of features similar to [jQuery][] to the [Go language][go]. It is based on Go's [net/html package][html] and the CSS Selector library [cascadia][]. Since the net/html parser returns nodes, and not a full-featured DOM tree, jQuery's stateful manipulation functions (like height(), css(), detach()) have been left off. | goquery brings a syntax and a set of features similar to [jQuery][] to the [Go language][go]. It is based on Go's [net/html package][html] and the CSS Selector library [cascadia][]. Since the net/html parser returns nodes, and not a full-featured DOM tree, jQuery's stateful manipulation functions (like height(), css(), detach()) have been left off. | ||||
Syntax-wise, it is as close as possible to jQuery, with the same function names when possible, and that warm and fuzzy chainable interface. jQuery being the ultra-popular library that it is, I felt that writing a similar HTML-manipulating library was better to follow its API than to start anew (in the same spirit as Go's `fmt` package), even though some of its methods are less than intuitive (looking at you, [index()][index]...). | Syntax-wise, it is as close as possible to jQuery, with the same function names when possible, and that warm and fuzzy chainable interface. jQuery being the ultra-popular library that it is, I felt that writing a similar HTML-manipulating library was better to follow its API than to start anew (in the same spirit as Go's `fmt` package), even though some of its methods are less than intuitive (looking at you, [index()][index]...). | ||||
## Table of Contents | |||||
* [Installation](#installation) | |||||
* [Changelog](#changelog) | |||||
* [API](#api) | |||||
* [Examples](#examples) | |||||
* [Related Projects](#related-projects) | |||||
* [Support](#support) | |||||
* [License](#license) | |||||
## Installation | ## Installation | ||||
Please note that because of the net/html dependency, goquery requires Go1.1+. | Please note that because of the net/html dependency, goquery requires Go1.1+. | ||||
**Note that goquery's API is now stable, and will not break.** | **Note that goquery's API is now stable, and will not break.** | ||||
* **2018-11-15 (v1.5.0)** : Go module support (thanks @Zaba505). | |||||
* **2018-06-07 (v1.4.1)** : Add `NewDocumentFromReader` examples. | |||||
* **2018-03-24 (v1.4.0)** : Deprecate `NewDocument(url)` and `NewDocumentFromResponse(response)`. | |||||
* **2018-01-28 (v1.3.0)** : Add `ToEnd` constant to `Slice` until the end of the selection (thanks to @davidjwilkins for raising the issue). | |||||
* **2018-01-11 (v1.2.0)** : Add `AddBack*` and deprecate `AndSelf` (thanks to @davidjwilkins). | |||||
* **2017-02-12 (v1.1.0)** : Add `SetHtml` and `SetText` (thanks to @glebtv). | * **2017-02-12 (v1.1.0)** : Add `SetHtml` and `SetText` (thanks to @glebtv). | ||||
* **2016-12-29 (v1.0.2)** : Optimize allocations for `Selection.Text` (thanks to @radovskyb). | * **2016-12-29 (v1.0.2)** : Optimize allocations for `Selection.Text` (thanks to @radovskyb). | ||||
* **2016-08-28 (v1.0.1)** : Optimize performance for large documents. | * **2016-08-28 (v1.0.1)** : Optimize performance for large documents. | ||||
import ( | import ( | ||||
"fmt" | "fmt" | ||||
"log" | "log" | ||||
"net/http" | |||||
"github.com/PuerkitoBio/goquery" | "github.com/PuerkitoBio/goquery" | ||||
) | ) | ||||
func ExampleScrape() { | func ExampleScrape() { | ||||
doc, err := goquery.NewDocument("http://metalsucks.net") | |||||
// Request the HTML page. | |||||
res, err := http.Get("http://metalsucks.net") | |||||
if err != nil { | |||||
log.Fatal(err) | |||||
} | |||||
defer res.Body.Close() | |||||
if res.StatusCode != 200 { | |||||
log.Fatalf("status code error: %d %s", res.StatusCode, res.Status) | |||||
} | |||||
// Load the HTML document | |||||
doc, err := goquery.NewDocumentFromReader(res.Body) | |||||
if err != nil { | if err != nil { | ||||
log.Fatal(err) | log.Fatal(err) | ||||
} | } | ||||
} | } | ||||
``` | ``` | ||||
## Related Projects | |||||
- [Goq][goq], an HTML deserialization and scraping library based on goquery and struct tags. | |||||
- [andybalholm/cascadia][cascadia], the CSS selector library used by goquery. | |||||
- [suntong/cascadia][cascadiacli], a command-line interface to the cascadia CSS selector library, useful to test selectors. | |||||
- [asciimoo/colly](https://github.com/asciimoo/colly), a lightning fast and elegant Scraping Framework | |||||
- [gnulnx/goperf](https://github.com/gnulnx/goperf), a website performance test tool that also fetches static assets. | |||||
- [MontFerret/ferret](https://github.com/MontFerret/ferret), declarative web scraping. | |||||
## Support | |||||
There are a number of ways you can support the project: | |||||
* Use it, star it, build something with it, spread the word! | |||||
- If you do build something open-source or otherwise publicly-visible, let me know so I can add it to the [Related Projects](#related-projects) section! | |||||
* Raise issues to improve the project (note: doc typos and clarifications are issues too!) | |||||
- Please search existing issues before opening a new one - it may have already been adressed. | |||||
* Pull requests: please discuss new code in an issue first, unless the fix is really trivial. | |||||
- Make sure new code is tested. | |||||
- Be mindful of existing code - PRs that break existing code have a high probability of being declined, unless it fixes a serious issue. | |||||
If you desperately want to send money my way, I have a BuyMeACoffee.com page: | |||||
<a href="https://www.buymeacoffee.com/mna" target="_blank"><img src="https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png" alt="Buy Me A Coffee" style="height: 41px !important;width: 174px !important;box-shadow: 0px 3px 2px 0px rgba(190, 190, 190, 0.5) !important;-webkit-box-shadow: 0px 3px 2px 0px rgba(190, 190, 190, 0.5) !important;" ></a> | |||||
## License | ## License | ||||
The [BSD 3-Clause license][bsd], the same as the [Go language][golic]. Cascadia's license is [here][caslic]. | The [BSD 3-Clause license][bsd], the same as the [Go language][golic]. Cascadia's license is [here][caslic]. | ||||
[jquery]: http://jquery.com/ | [jquery]: http://jquery.com/ | ||||
[go]: http://golang.org/ | [go]: http://golang.org/ | ||||
[cascadia]: https://github.com/andybalholm/cascadia | [cascadia]: https://github.com/andybalholm/cascadia | ||||
[cascadiacli]: https://github.com/suntong/cascadia | |||||
[bsd]: http://opensource.org/licenses/BSD-3-Clause | [bsd]: http://opensource.org/licenses/BSD-3-Clause | ||||
[golic]: http://golang.org/LICENSE | [golic]: http://golang.org/LICENSE | ||||
[caslic]: https://github.com/andybalholm/cascadia/blob/master/LICENSE | [caslic]: https://github.com/andybalholm/cascadia/blob/master/LICENSE | ||||
[wiki]: https://github.com/PuerkitoBio/goquery/wiki/Tips-and-tricks | [wiki]: https://github.com/PuerkitoBio/goquery/wiki/Tips-and-tricks | ||||
[thatguystone]: https://github.com/thatguystone | [thatguystone]: https://github.com/thatguystone | ||||
[piotr]: https://github.com/piotrkowalczuk | [piotr]: https://github.com/piotrkowalczuk | ||||
[goq]: https://github.com/andrewstuart/goq |
"golang.org/x/net/html" | "golang.org/x/net/html" | ||||
) | ) | ||||
const ( | |||||
maxUint = ^uint(0) | |||||
maxInt = int(maxUint >> 1) | |||||
// ToEnd is a special index value that can be used as end index in a call | |||||
// to Slice so that all elements are selected until the end of the Selection. | |||||
// It is equivalent to passing (*Selection).Length(). | |||||
ToEnd = maxInt | |||||
) | |||||
// First reduces the set of matched elements to the first in the set. | // First reduces the set of matched elements to the first in the set. | ||||
// It returns a new Selection object, and an empty Selection object if the | // It returns a new Selection object, and an empty Selection object if the | ||||
// the selection is empty. | // the selection is empty. | ||||
} | } | ||||
// Slice reduces the set of matched elements to a subset specified by a range | // Slice reduces the set of matched elements to a subset specified by a range | ||||
// of indices. | |||||
// of indices. The start index is 0-based and indicates the index of the first | |||||
// element to select. The end index is 0-based and indicates the index at which | |||||
// the elements stop being selected (the end index is not selected). | |||||
// | |||||
// The indices may be negative, in which case they represent an offset from the | |||||
// end of the selection. | |||||
// | |||||
// The special value ToEnd may be specified as end index, in which case all elements | |||||
// until the end are selected. This works both for a positive and negative start | |||||
// index. | |||||
func (s *Selection) Slice(start, end int) *Selection { | func (s *Selection) Slice(start, end int) *Selection { | ||||
if start < 0 { | if start < 0 { | ||||
start += len(s.Nodes) | start += len(s.Nodes) | ||||
} | } | ||||
if end < 0 { | |||||
if end == ToEnd { | |||||
end = len(s.Nodes) | |||||
} else if end < 0 { | |||||
end += len(s.Nodes) | end += len(s.Nodes) | ||||
} | } | ||||
return pushStack(s, s.Nodes[start:end]) | return pushStack(s, s.Nodes[start:end]) |
// AndSelf adds the previous set of elements on the stack to the current set. | // AndSelf adds the previous set of elements on the stack to the current set. | ||||
// It returns a new Selection object containing the current Selection combined | // It returns a new Selection object containing the current Selection combined | ||||
// with the previous one. | // with the previous one. | ||||
// Deprecated: This function has been deprecated and is now an alias for AddBack(). | |||||
func (s *Selection) AndSelf() *Selection { | func (s *Selection) AndSelf() *Selection { | ||||
return s.AddBack() | |||||
} | |||||
// AddBack adds the previous set of elements on the stack to the current set. | |||||
// It returns a new Selection object containing the current Selection combined | |||||
// with the previous one. | |||||
func (s *Selection) AddBack() *Selection { | |||||
return s.AddSelection(s.prevSel) | return s.AddSelection(s.prevSel) | ||||
} | } | ||||
// AddBackFiltered reduces the previous set of elements on the stack to those that | |||||
// match the selector string, and adds them to the current set. | |||||
// It returns a new Selection object containing the current Selection combined | |||||
// with the filtered previous one | |||||
func (s *Selection) AddBackFiltered(selector string) *Selection { | |||||
return s.AddSelection(s.prevSel.Filter(selector)) | |||||
} | |||||
// AddBackMatcher reduces the previous set of elements on the stack to those that match | |||||
// the mateher, and adds them to the curernt set. | |||||
// It returns a new Selection object containing the current Selection combined | |||||
// with the filtered previous one | |||||
func (s *Selection) AddBackMatcher(m Matcher) *Selection { | |||||
return s.AddSelection(s.prevSel.FilterMatcher(m)) | |||||
} |
module github.com/PuerkitoBio/goquery | |||||
require ( | |||||
github.com/andybalholm/cascadia v1.0.0 | |||||
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a | |||||
) |
github.com/andybalholm/cascadia v1.0.0 h1:hOCXnnZ5A+3eVDX8pvgl4kofXv2ELss0bKcqRySc45o= | |||||
github.com/andybalholm/cascadia v1.0.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y= | |||||
golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | |||||
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a h1:gOpx8G595UYyvj8UK4+OFyY4rx037g3fmfhe5SasG3U= | |||||
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= |
return s.Remove() | return s.Remove() | ||||
} | } | ||||
// Set the html content of each element in the selection to specified html string. | |||||
// SetHtml sets the html content of each element in the selection to | |||||
// specified html string. | |||||
func (s *Selection) SetHtml(html string) *Selection { | func (s *Selection) SetHtml(html string) *Selection { | ||||
return setHtmlNodes(s, parseHtml(html)...) | return setHtmlNodes(s, parseHtml(html)...) | ||||
} | } | ||||
// Set the content of each element in the selection to specified content. The | |||||
// provided text string is escaped. | |||||
// SetText sets the content of each element in the selection to specified content. | |||||
// The provided text string is escaped. | |||||
func (s *Selection) SetText(text string) *Selection { | func (s *Selection) SetText(text string) *Selection { | ||||
return s.SetHtml(html.EscapeString(text)) | return s.SetHtml(html.EscapeString(text)) | ||||
} | } |
// Is checks the current matched set of elements against a selector and | // Is checks the current matched set of elements against a selector and | ||||
// returns true if at least one of these elements matches. | // returns true if at least one of these elements matches. | ||||
func (s *Selection) Is(selector string) bool { | func (s *Selection) Is(selector string) bool { | ||||
if len(s.Nodes) > 0 { | |||||
return s.IsMatcher(compileMatcher(selector)) | |||||
} | |||||
return false | |||||
return s.IsMatcher(compileMatcher(selector)) | |||||
} | } | ||||
// IsMatcher checks the current matched set of elements against a matcher and | // IsMatcher checks the current matched set of elements against a matcher and |
// NewDocument is a Document constructor that takes a string URL as argument. | // NewDocument is a Document constructor that takes a string URL as argument. | ||||
// It loads the specified document, parses it, and stores the root Document | // It loads the specified document, parses it, and stores the root Document | ||||
// node, ready to be manipulated. | // node, ready to be manipulated. | ||||
// | |||||
// Deprecated: Use the net/http standard library package to make the request | |||||
// and validate the response before calling goquery.NewDocumentFromReader | |||||
// with the response's body. | |||||
func NewDocument(url string) (*Document, error) { | func NewDocument(url string) (*Document, error) { | ||||
// Load the URL | // Load the URL | ||||
res, e := http.Get(url) | res, e := http.Get(url) | ||||
return NewDocumentFromResponse(res) | return NewDocumentFromResponse(res) | ||||
} | } | ||||
// NewDocumentFromReader returns a Document from a generic reader. | |||||
// NewDocumentFromReader returns a Document from an io.Reader. | |||||
// It returns an error as second value if the reader's data cannot be parsed | // It returns an error as second value if the reader's data cannot be parsed | ||||
// as html. It does *not* check if the reader is also an io.Closer, so the | |||||
// provided reader is never closed by this call, it is the responsibility | |||||
// as html. It does not check if the reader is also an io.Closer, the | |||||
// provided reader is never closed by this call. It is the responsibility | |||||
// of the caller to close it if required. | // of the caller to close it if required. | ||||
func NewDocumentFromReader(r io.Reader) (*Document, error) { | func NewDocumentFromReader(r io.Reader) (*Document, error) { | ||||
root, e := html.Parse(r) | root, e := html.Parse(r) | ||||
// NewDocumentFromResponse is another Document constructor that takes an http response as argument. | // NewDocumentFromResponse is another Document constructor that takes an http response as argument. | ||||
// It loads the specified response's document, parses it, and stores the root Document | // It loads the specified response's document, parses it, and stores the root Document | ||||
// node, ready to be manipulated. The response's body is closed on return. | // node, ready to be manipulated. The response's body is closed on return. | ||||
// | |||||
// Deprecated: Use goquery.NewDocumentFromReader with the response's body. | |||||
func NewDocumentFromResponse(res *http.Response) (*Document, error) { | func NewDocumentFromResponse(res *http.Response) (*Document, error) { | ||||
if res == nil { | if res == nil { | ||||
return nil, errors.New("Response is nil") | return nil, errors.New("Response is nil") |
module "github.com/andybalholm/cascadia" | |||||
require "golang.org/x/net" v0.0.0-20180218175443-cbe0f9307d01 |
gitea.com/macaron/toolbox | gitea.com/macaron/toolbox | ||||
# github.com/BurntSushi/toml v0.3.1 | # github.com/BurntSushi/toml v0.3.1 | ||||
github.com/BurntSushi/toml | github.com/BurntSushi/toml | ||||
# github.com/PuerkitoBio/goquery v0.0.0-20170324135448-ed7d758e9a34 | |||||
# github.com/PuerkitoBio/goquery v1.5.0 | |||||
github.com/PuerkitoBio/goquery | github.com/PuerkitoBio/goquery | ||||
# github.com/RoaringBitmap/roaring v0.4.7 | # github.com/RoaringBitmap/roaring v0.4.7 | ||||
github.com/RoaringBitmap/roaring | github.com/RoaringBitmap/roaring | ||||
# github.com/andybalholm/cascadia v0.0.0-20161224141413-349dd0209470 | |||||
# github.com/andybalholm/cascadia v1.0.0 | |||||
github.com/andybalholm/cascadia | github.com/andybalholm/cascadia | ||||
# github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 | # github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 | ||||
github.com/anmitsu/go-shlex | github.com/anmitsu/go-shlex | ||||
golang.org/x/text/internal/utf8internal | golang.org/x/text/internal/utf8internal | ||||
golang.org/x/text/runes | golang.org/x/text/runes | ||||
golang.org/x/text/internal/tag | golang.org/x/text/internal/tag | ||||
# google.golang.org/appengine v1.6.1 | |||||
# google.golang.org/appengine v1.6.2 | |||||
google.golang.org/appengine/cloudsql | google.golang.org/appengine/cloudsql | ||||
google.golang.org/appengine/urlfetch | google.golang.org/appengine/urlfetch | ||||
google.golang.org/appengine/internal | google.golang.org/appengine/internal |