go 파충류 - goquery 가방 과 정규 및 gojquery 의 총 결 사용 사용
6369 단어 go.
package main
import (
"fmt"
"io"
"log"
"net/http"
"os"
"strconv"
"strings"
// "github.com/antchfx/htmlquery" // xpath
"github.com/PuerkitoBio/goquery"
)
func main() {
// ,
var start, end int
fmt.Println(" ")
fmt.Scan(&start)
fmt.Println(" ")
fmt.Scan(&end)
// working(start, end) //
spider(start, end) // goquery
}
func working(start, end int) {
for i := start; i < end; i++ {
url := "https://tieba.baidu.com/f?kw=%E9%BB%91tfboys&ie=utf-8&pn=" + strconv.Itoa(i*50)
result, err := httpGet(url)
if err != nil {
fmt.Println(" ")
continue
}
f, err := os.Create(" " + strconv.Itoa(i) + " .html")
if err != nil {
fmt.Println("create html error ")
return
}
f.WriteString(result)
f.Close() // defer defer for defer
}
}
func spider(start, end int) {
f, err := os.OpenFile("sao2015.txt", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err != nil {
fmt.Println("create file fail")
return
}
for m := 1; m < 13; m++ {
for i := start; i < end; i++ {
fmt.Println(i)
url := "https://www.054gan.com/video/2015-" + strconv.Itoa(m) + "/" + strconv.Itoa(i) + ".html"
result, err := httpGet(url)
if err != nil {
fmt.Println(" ")
continue
}
dom, err := goquery.NewDocumentFromReader(strings.NewReader(result))
if err != nil {
log.Fatalln(err)
}
dom.Find(".cat_pos a font").Each(func(i int, selection *goquery.Selection) {
fmt.Println("i", i, "select text", selection.Text())
f.WriteString(selection.Text() + "----" + url + "
")
})
}
}
f.Close()
}
func httpGet(url string) (result string, err error) {
resp, err := http.Get(url)
if err != nil {
fmt.Println(" ")
return
}
//
defer resp.Body.Close()
buf := make([]byte, 4096)
for {
n, err2 := resp.Body.Read(buf)
if n == 0 || err2 == io.EOF { //
fmt.Println(" ")
break //
}
if err2 != nil && err2 != io.EOF {
err = err2
return //
}
result += string(buf[:n])
}
return
}
제2판 병발 판
package main
import (
"fmt"
"io"
"net/http"
"os"
"strconv"
)
func main() {
// ,
var start, end int
fmt.Println(" ")
fmt.Scan(&start)
fmt.Println(" ")
fmt.Scan(&end)
working(start, end)
}
func working(start, end int) {
page := make(chan int)
for i := start; i <= end; i++ {
go spider(i, page)
}
// page page select
for i := start; i <= end; i++ {
fmt.Printf(" %d
",
결론: 병발 은 하나의 통 로 를 추가 한 것 이다. 마지막 감청 채널 마다 작업 이 완료 되면 그러면 이 통로 에서 숫자 가 들 어 오 는 것 과 같다.이 감청 통달 의 순환 이 끝 날 때 까지 실 행 될 수 있다.
goquery 요약: 먼저 작은 예 를 들 어 입문 하 다
func main() {
html := `
,
。
,
。
`
dom,err:=goquery.NewDocumentFromReader(strings.NewReader(html))
if err!=nil{
log.Fatalln(err)
}
dom.Find("p").Each(func(i int, selection *goquery.Selection) {
fmt.Println(selection.Text())
})
}
NewDocumentFromReader() *Document error。Document HTML 。
Find() , x , 。 P, p 。
Each() , , , 2 , , 。
Text()
선택 기: jqery 의 선택 기 는 대부분 goquery 에서 도 사용 할 수 있 습 니 다. 예컨대
유사 함수 의 위치 조작
doc.Find("#content-left .article ").Each(func(i int, s *goquery.Selection) {
url, _ := s.Find("a[class]").Attr("href")
hash["all_content"] = sub_doc.Find(".content").Text()
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
go 의 값 전달 과 참조 전달절편 과 지 도 는 모두 인용 유형 이다.현지에서 새로운 변수 로 할당 되 었 을 때 같은 내부 데이터 구 조 를 가리킨다.따라서 그 중의 한 변 수 를 바 꾸 면 다른 변수 에 영향 을 줄 수 있다. 다음은 참조 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.