出于某些研究目的,我目前正在尝试从 RottenTomatoes 获取搜索列表。我已经整合了goquery
以一种简单的方式针对不同的站点。但 RottenTomatoes 的情况就不一样了。我无法获得搜索列表,即使我尝试了不同的查询粉碎。
测试网址:https://www.rottentomatoes.com/search/?search=test
我要获取的文本:Testament
doc.Text()
输出: https://pastebin.com/SsWHYXTH
这是我的做法:
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
P.S: 当我通过 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)
})
}
最佳答案
有一些(许多)替代方案,但如果您想要电影的所有链接列表,这应该可行:
#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 时
关于html - 如何使用 jquery 从 Rotten Tomatoes 检索搜索列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53746518/