Html 从谷歌搜索结果页面提取URL

Html 从谷歌搜索结果页面提取URL,html,go,screen-scraping,Html,Go,Screen Scraping,我正试图从谷歌搜索页面上抓取所有的URL,我认为有两种方法可以做到,但我真的不知道如何做到这一点 首先,我可以简单地从.r标记中刮取它们,并获得每个链接的href属性。然而,这给了我一个很长的字符串,我必须解析它才能得到URL。下面是一个必须解析的示例: 我想从中得到的URL是: 因此,我必须在https和&sa之间创建一个字符串,我不能100%确定该怎么做,因为谷歌给我的每一个真正长的字符串都有不同的大小,所以仅使用slice并将其切割成“x”个字符是行不通的 第二个,在谷歌搜索的每个链接

我正试图从谷歌搜索页面上抓取所有的URL,我认为有两种方法可以做到,但我真的不知道如何做到这一点

首先,我可以简单地从
.r
标记中刮取它们,并获得每个链接的
href
属性。然而,这给了我一个很长的字符串,我必须解析它才能得到URL。下面是一个必须解析的示例:

我想从中得到的URL是:

因此,我必须在
https
&sa
之间创建一个字符串,我不能100%确定该怎么做,因为谷歌给我的每一个真正长的字符串都有不同的大小,所以仅使用slice并将其切割成“x”个字符是行不通的

第二个,在谷歌搜索的每个链接下面都有绿色文本的URL。右键单击该元素并检查该元素将给出:
cite class=“\u Rm”
(在V形之间),我不知道如何使用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)
        })

    })

}

标准库支持解析URL。看看包裹。使用这个包,我们可以从URL获取查询参数

请注意,原始原始URL包含要在
“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)
输出(在上尝试):


哇,这真的很有趣,我从来没有想过这样做。非常感谢!我会仔细考虑一下,以确保我100%理解它我以为你的意思是“从谷歌搜索页面html中抓取URL”:哦,好吧
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/