如何正确解析golang中通过http提供的整数?

时间:2014-07-08 12:00:28

标签: html parsing go

我是Go的新手,为了锻炼,我正在构建一个使用正则表达式从网站中提取一些信息的爬虫。但是,似乎Go错误地解析了网页。使用以下代码:

package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
    "regexp"
)

func getPages(url string,reg *regexp.Regexp) int{
    resp,_:=http.Get(url)
    defer resp.Body.Close()

    body, _ := ioutil.ReadAll(resp.Body)

    mm:=reg.FindAllSubmatch(body,-1)
    fmt.Println("\n"+url+"\n")
    for _,val:=range mm{
        fmt.Println(string(val[0]))
        fmt.Println(string(val[1]))
        fmt.Println(val[1])
    }
    return 1
}

func main() {
    url:="http://www.vinmonopolet.no/vareutvalg/sok?query=*&sort=2&sortMode=0&page=1&filterIds=25&filterValues=Rødvin"
    rr:=regexp.MustCompile(`query=\*&sort=2&sortMode=0&page=\d+&filterIds=25&filterValues=\S{1,15}">(\d+)`)
    getPages(url,rr)
}

我阅读了网址的内容,并收到了以下格式的输出:

query=*&sort=2&sortMode=0&page=10&filterIds=25&filterValues=R">10
10
[49 48]
query=*&sort=2&sortMode=0&page=11&filterIds=25&filterValues=R">11
11
[49 49]
query=*&sort=2&sortMode=0&page=355&filterIds=25&filterValues=R">355
355
[51 53 53]

除最后一个之外的所有值都是正确的。导航到http://www.vinmonopolet.no/vareutvalg/sok?query=*&sort=2&sortMode=0&page=1&filterIds=25&filterValues=Rødvin并查看其来源,显示最后一个条目的值应为205,而不是355.

有人能指出我正确的方向来解决这个问题吗?

编辑:正则表达式按预期工作。这不是问题。另外,如果将url变量替换为例如

url:="http://www.vinmonopolet.no/vareutvalg/sok?query=*&sort=2&sortMode=0&page=1&filterIds=25&filterValues=Hvitvin"

具有较少的分页(138),它似乎按预期工作。

编辑2:我正在使用ubuntu 14.04上的1.2.1版本,标准的apt-get install。 编辑3:我编译1.3并尝试使用此版本具有相同的结果。

0 个答案:

没有答案