как очистить атрибут в одежде с колли

# #html #go #web-scraping #html-parsing #go-colly

Вопрос:

Я пытаюсь очистить продукт от продукта, но не могу. пожалуйста, помогите

html-код

 lt;span class="info"gt;  lt;button data-product="{"merchantName":"xxx","price":"11","productName":"car window","categoryName":"windows","brandName":"aa assosiations","productId":"which I want to scrape"}"gt;    

когда я пытаюсь

 h.ChildAttr("span.infogt;button", "data-product")  

результат таков {"merchantName":"xxx","price":"11","productName":"car window","categoryName":"windows","brandName":"aa assosiations","productId":"which I want to scrape"}

и когда я пытаюсь

 h.ChildAttr("span.infogt;button", "productId")  

результата нет. как я могу получить эти данные с помощью Колли?

Комментарии:

1. Никогда раньше не пользовался go-colly, но, может h.ChildAttr("span.infogt;button", "data-product.productId") быть ?

2. спасибо, но опять безрезультатно. я думаю, что Колли не имеет значения. goquery или что-нибудь для разбора html делают это тем же методом, но я не могу найти в Google

Ответ №1:

Значение атрибута является необработанным значением, и в данном случае оно в формате JSON, поэтому вам нужно будет проанализировать JSON, чтобы правильно получить данные.

Например:

 package main  import (  "log"  "encoding/json"  "github.com/gocolly/colly" )  func main() {  c := colly.NewCollector()   c.OnHTML(`body`, func(e *colly.HTMLElement) {  text := e.ChildAttr("span.infogt;button", "data-product")   var result map[string]interface{}  err := json.Unmarshal([]byte(text), amp;result)  if err != nil {  log.Println(err)  return  }  log.Println(result["productId"])  })   c.Visit("[some url]") }  

Выход

 2021/10/21 14:23:24 which I want to scrape  

Комментарии:

1. @Shinan Я обновил, чтобы отразить ваши изменения, если это нормально

2. спасибо за ваш ответ и за вашу идею var result map[string]interface{} json.Unmarshal([]byte(body), amp;result) fmt.Println(result["ProductId"])