# #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"])