从 Google 个搜索结果页面中提取网址
Extract URLs from Google search result page
我正在尝试从 Google 搜索页面中获取所有 URLs,我认为有两种方法可以做到,但我真的不知道怎么做。
首先,我可以简单地从 .r
标签中抓取它们并为每个 link 获取 href
属性。但是,这给了我一个非常长的字符串,我必须解析它才能获得 URL。这是必须通过以下方式解析的示例:
我想要的 URL 是:
所以我必须在 https
和 &sa
之间创建一个字符串,我不是 100% 确定该怎么做,因为每个很长的字符串 Google 给我的是不同的大小,所以只使用切片并将其切割 "x" 字符数量是行不通的。
第二个,Google 搜索中每个link 的下方都有绿色文本的URL。右键单击它并检查该元素会给出:cite class="_Rm"
(在人字形之间),我不知道如何使用 goquery 找到它,因为使用我的小函数查找 cite
只会给我更长的字符串。
这是我的小函数,它目前在没有解析的情况下执行第一个选项,并给我一长串文本,将我带到搜索页面:
func GetUrls(url string) {
doc, err := goquery.NewDocument(url)
if err != nil {
panic(err)
}
doc.Find(".r").Each(func(i int, s *goquery.Selection) {
doc.Find(".r a").Each(func(i int, s *goquery.Selection) {
Link, _ := s.Attr("href")
Link = url + Link
fmt.Printf("link is [%s]\n", Link)
})
})
}
标准库支持解析 URLs。查看 net/url
包。使用这个包,我们可以从 URLs.
获取查询参数
注意你原来的rawURL在"aqs"
参数中包含了你要提取的URL,形式为
chrome.0.0l2j69i59j69i60j0l2.1754j0j7/url?q=https://youknowumsayin.wordpress.com/2015/03/16/the-inventory-and-you-what-items-should-i-bring-mh4u/
这基本上是另一个 URL。
让我们编写一个小辅助函数,它从原始 URL 文本中获取参数:
func getParam(raw, param string) (string, error) {
u, err := url.Parse(raw)
if err != nil {
return "", err
}
q := u.Query()
if q == nil {
return "", fmt.Errorf("No query part")
}
v := q.Get(param)
if v == "" {
return "", fmt.Errorf("Param not found")
}
return v, nil
}
使用这个我们可以从原来的 URL 中得到 "aqs"
参数,再次使用这个我们可以得到 "q"
参数,这正是你想要的 URL :
raw := "https://www.google.com/search?sourceid=chrome-psyapi2&ion=1&espv=2&ie=UTF-8&q=mh4u%20items&oq=mh4u%20items&aqs=chrome.0.0l2j69i59j69i60j0l2.1754j0j7/url?q=https://youknowumsayin.wordpress.com/2015/03/16/the-inventory-and-you-what-items-should-i-bring-mh4u/&sa=U&ei=n8NvVdSvBMOsyATSzYKoCQ&ved=0CEUQFjAL&usg=AFQjCNGyD5NjsqOncyLElJt9C0hqVQ7gyA"
aqs, err := getParam(raw, "aqs")
if err != nil {
panic(err)
}
fmt.Println(aqs)
result, err := getParam(aqs, "q")
fmt.Println(result)
输出(在 Go Playground 上尝试):
chrome.0.0l2j69i59j69i60j0l2.1754j0j7/url?q=https://youknowumsayin.wordpress.com/2015/03/16/the-inventory-and-you-what-items-should-i-bring-mh4u/
https://youknowumsayin.wordpress.com/2015/03/16/the-inventory-and-you-what-items-should-i-bring-mh4u/
我正在尝试从 Google 搜索页面中获取所有 URLs,我认为有两种方法可以做到,但我真的不知道怎么做。
首先,我可以简单地从 .r
标签中抓取它们并为每个 link 获取 href
属性。但是,这给了我一个非常长的字符串,我必须解析它才能获得 URL。这是必须通过以下方式解析的示例:
我想要的 URL 是:
所以我必须在 https
和 &sa
之间创建一个字符串,我不是 100% 确定该怎么做,因为每个很长的字符串 Google 给我的是不同的大小,所以只使用切片并将其切割 "x" 字符数量是行不通的。
第二个,Google 搜索中每个link 的下方都有绿色文本的URL。右键单击它并检查该元素会给出:cite class="_Rm"
(在人字形之间),我不知道如何使用 goquery 找到它,因为使用我的小函数查找 cite
只会给我更长的字符串。
这是我的小函数,它目前在没有解析的情况下执行第一个选项,并给我一长串文本,将我带到搜索页面:
func GetUrls(url string) {
doc, err := goquery.NewDocument(url)
if err != nil {
panic(err)
}
doc.Find(".r").Each(func(i int, s *goquery.Selection) {
doc.Find(".r a").Each(func(i int, s *goquery.Selection) {
Link, _ := s.Attr("href")
Link = url + Link
fmt.Printf("link is [%s]\n", Link)
})
})
}
标准库支持解析 URLs。查看 net/url
包。使用这个包,我们可以从 URLs.
注意你原来的rawURL在"aqs"
参数中包含了你要提取的URL,形式为
chrome.0.0l2j69i59j69i60j0l2.1754j0j7/url?q=https://youknowumsayin.wordpress.com/2015/03/16/the-inventory-and-you-what-items-should-i-bring-mh4u/
这基本上是另一个 URL。
让我们编写一个小辅助函数,它从原始 URL 文本中获取参数:
func getParam(raw, param string) (string, error) {
u, err := url.Parse(raw)
if err != nil {
return "", err
}
q := u.Query()
if q == nil {
return "", fmt.Errorf("No query part")
}
v := q.Get(param)
if v == "" {
return "", fmt.Errorf("Param not found")
}
return v, nil
}
使用这个我们可以从原来的 URL 中得到 "aqs"
参数,再次使用这个我们可以得到 "q"
参数,这正是你想要的 URL :
raw := "https://www.google.com/search?sourceid=chrome-psyapi2&ion=1&espv=2&ie=UTF-8&q=mh4u%20items&oq=mh4u%20items&aqs=chrome.0.0l2j69i59j69i60j0l2.1754j0j7/url?q=https://youknowumsayin.wordpress.com/2015/03/16/the-inventory-and-you-what-items-should-i-bring-mh4u/&sa=U&ei=n8NvVdSvBMOsyATSzYKoCQ&ved=0CEUQFjAL&usg=AFQjCNGyD5NjsqOncyLElJt9C0hqVQ7gyA"
aqs, err := getParam(raw, "aqs")
if err != nil {
panic(err)
}
fmt.Println(aqs)
result, err := getParam(aqs, "q")
fmt.Println(result)
输出(在 Go Playground 上尝试):
chrome.0.0l2j69i59j69i60j0l2.1754j0j7/url?q=https://youknowumsayin.wordpress.com/2015/03/16/the-inventory-and-you-what-items-should-i-bring-mh4u/
https://youknowumsayin.wordpress.com/2015/03/16/the-inventory-and-you-what-items-should-i-bring-mh4u/