GoQuery is a library for the Go programming language that provides a set of features for traversing and manipulating HTML documents, which is inspired by the jQuery library for JavaScript. Although GoQuery takes heavy inspiration from jQuery, it is important to note that GoQuery is not a direct port of jQuery; therefore, there are differences in implementation and possibly in the specifics of selector syntax.
The selector syntax in GoQuery is largely based on Go's net/html
parser, which in turn is designed to be compliant with the HTML5 specification. GoQuery uses the Cascading Style Sheets (CSS) selector engine provided by the github.com/PuerkitoBio/goquery
package, which is quite powerful and supports many of the selector patterns available in jQuery.
In general, you can expect most basic CSS selectors to work the same way in both jQuery and GoQuery. This includes:
- Type selectors (
div
,p
,span
, etc.) - Class selectors (
.class-name
) - ID selectors (
#id
) - Attribute selectors (
[attr="value"]
,[attr^="value"]
,[attr$="value"]
,[attr*="value"]
) - Child selectors (
parent > child
) - Descendant selectors (
ancestor descendant
) - Adjacent sibling selectors (
prev + next
) - General sibling selectors (
prev ~ siblings
)
However, there may be differences in support for more complex or less commonly used selectors. Additionally, some jQuery-specific pseudo-classes (like :eq()
, :animated
, or :visible
) are not part of CSS and are therefore not supported by GoQuery.
For the most part, if you're using standard CSS selectors, you should be able to use GoQuery with the same syntax as you would use in jQuery. However, it's always good practice to refer to the GoQuery documentation for specific details on selector support and any edge cases.
Here's a simple example of using a selector with GoQuery in Go:
package main
import (
"fmt"
"log"
"net/http"
"github.com/PuerkitoBio/goquery"
)
func main() {
// Make a request to the website
res, err := http.Get("https://example.com")
if err != nil {
log.Fatal(err)
}
defer res.Body.Close()
// Parse the HTML document
doc, err := goquery.NewDocumentFromReader(res.Body)
if err != nil {
log.Fatal(err)
}
// Use a CSS selector to find elements
doc.Find("div.some-class > p").Each(func(i int, s *goquery.Selection) {
// Extract and print the text of each element
fmt.Println(s.Text())
})
}
This code fetches the HTML content of https://example.com
, parses it, and then finds all paragraphs (p
) that are direct children of a div
with the class some-class
, printing their text content to the console.
Remember that you should always respect the terms of service of the website you are scraping, and ensure that your web scraping activities are legal and ethical.