Как получить список поиска, используя goquery из RottenTomatoes? - PullRequest
0 голосов
/ 12 декабря 2018

В настоящее время я пытаюсь получить список поиска от RottenTomatoes для некоторых исследовательских целей.Я легко интегрировал goquery для разных сайтов.Но ситуация с RottenTomatoes была не такой.Я не могу получить список поиска, хотя я пробовал разные варианты с запросами.

URL-адрес тестирования: https://www.rottentomatoes.com/search/?search=test

Текст Я хочу получить: Testament

doc.Text() Вывод: https://pastebin.com/SsWHYXTH

movie

Вот что я делаю:

func ParseSearchMovies(doc *goquery.Document) *models.SearchResponse {
    result := new(models.SearchResponse)
    finder0 := doc.Find("section > section > ul")
    finder1 := doc.Find("section.movieSection > ul")
    finder2 := doc.Find("section.movieSection > ul > li")
    finder3 := doc.Find("movieSection")
    finder4 := doc.Find("section.movieSection")
    finder5 := doc.Find("section.movieSection ul.results_ul")
    finder6 := doc.Find("div.Search.Results li.bottom_divider.clearfix")
    finder7 := doc.Find("div.search-results-root span.bold")
    finder8 := doc.Find("div.search-results-root #details")
    finder9 := doc.Find("div.search-results-root li.bottom_divider.clearfix")
    finder10 := doc.Find("#movieSection > ul > li:nth-child(1)")
    finder11 := doc.Find("#movieSection > ul")
    finder12 := doc.Find("#movieSection > ul .bottom_divider.clearfix")
    finder13 := doc.Find("#movieSection > ul > li")
    finder14 := doc.Find("section.Search.Results .movieSection")
    finder15 := doc.Find("#search-results-root section")
    finder16 := doc.Find("#search-results-root .section")
    finder17 := doc.Find("#search-results-root .section .section")
    finder18 := doc.Find("#search-results-root > section > section")
    finder19 := doc.Find("#search-results-root > section .section")

    //From hlscalon's answer
    finder20 := doc.Find("#movieSection > .results_ul > li > div.details")
    finder21 := doc.Find("#movieSection > .results_ul > li")
    finder22 := doc.Find("#movieSection > .results_ul")
    finder23 := doc.Find("#movieSection")

    fmt.Printf("%d", len(finder0.Nodes))
    fmt.Printf("%d", len(finder1.Nodes))
    fmt.Printf("%d", len(finder2.Nodes))
    fmt.Printf("%d", len(finder3.Nodes))
    fmt.Printf("%d", len(finder4.Nodes))
    fmt.Printf("%d", len(finder5.Nodes))
    fmt.Printf("%d", len(finder6.Nodes))
    fmt.Printf("%d", len(finder7.Nodes))
    fmt.Printf("%d", len(finder8.Nodes))
    fmt.Printf("%d", len(finder9.Nodes))
    fmt.Printf("%d", len(finder10.Nodes))
    fmt.Printf("%d", len(finder11.Nodes))
    fmt.Printf("%d", len(finder12.Nodes))
    fmt.Printf("%d", len(finder13.Nodes))
    fmt.Printf("%d", len(finder14.Nodes))
    fmt.Printf("%d", len(finder15.Nodes))
    fmt.Printf("%d", len(finder16.Nodes))
    fmt.Printf("%d", len(finder17.Nodes))
    fmt.Printf("%d", len(finder18.Nodes))
    fmt.Printf("%d", len(finder19.Nodes))
    fmt.Printf("%d", len(finder20.Nodes))
    fmt.Printf("%d", len(finder21.Nodes))
    fmt.Printf("%d", len(finder22.Nodes))
    fmt.Printf("%d", len(finder23.Nodes))
}
  • Expected: 9 (количество фильмов в <section id="movieSection">)

  • Actual: Все результаты возвращаются 0. Выход:000000000000000000000000

PS: Когда я печатаю результат на консоль через doc.Text(), вся страница отображается правильно.

Для печативсе названия фильмов по порядку:

if len(myFinder.Nodes) > 0 {
    doc.Find("MY QUERY").Each(func(i int, s *goquery.Selection) {
        name := s.Find("a")

        fmt.Println(name)
    })
}

1 Ответ

0 голосов
/ 12 декабря 2018

Есть несколько (много) альтернатив, но если вам нужен список всех ссылок на фильмы, это должно сработать:

#movieSection > .results_ul > li > div.details > span.bold > a.articleLink

Это приведет вас непосредственно к ссылкам (a), поэтому, возможно,вам придется изменить свою функцию для печати имен или остановить один шаг до (span)

Редактировать

На самом деле, я думаю, что не могу использовать goquery дляотменить эту страницу.Он использует react, поэтому при загрузке страницы (т.е. curl "https://www.rottentomatoes.com/search/?search=test") вы увидите следующее:

<div id="main_container" class="container ">
    <div class="col col-left-center col-full-xs">
        <div id="search-results-root"></div>
            <script>
                require(['jquery', 'globals', 'search-results', 'bootstrap'], function($, RT, mount) {
                mount($("#search-results-root").get(0), RT.PrivateApiV2FrontendHost, 'test', {"actorCount"....

Когда goquery ожидает только html

...