第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

網(wǎng)絡(luò)爬蟲在第一頁停止

網(wǎng)絡(luò)爬蟲在第一頁停止

Go
慕絲7291255 2022-09-12 20:31:04
我正在開發(fā)一個網(wǎng)絡(luò)爬蟲,它應(yīng)該像這樣工作:轉(zhuǎn)到某個網(wǎng)站,抓取該網(wǎng)站的所有鏈接下載所有圖像(從起始頁開始)如果當(dāng)前頁面上沒有留下任何圖像,請轉(zhuǎn)到步驟1中找到的下一個鏈接,然后執(zhí)行步驟2和3,直到?jīng)]有鏈接/圖像為止。似乎下面的代碼以某種方式工作,就像當(dāng)我嘗試抓取一些網(wǎng)站時,我會得到一些圖像下載。(即使我不理解我得到的圖像,因為我在網(wǎng)站上找不到它們,似乎爬蟲不是從網(wǎng)站的起始頁開始的)。經(jīng)過幾張圖像(~25-500張),爬行器完成并停止,沒有錯誤,它只是停止。我在多個網(wǎng)站上嘗試了這個,在一些圖像之后,它只是停止了。我認為爬蟲以某種方式忽略了步驟3。package mainimport (    "fmt"    "io"    "log"    "net/http"    "os"    "strconv"    "strings"    "github.com/PuerkitoBio/goquery")var (    currWebsite  string = "https://www.youtube.com"    imageCount   int    = 0    crawlWebsite string)func processElement(index int, element *goquery.Selection) {    href, exists := element.Attr("href")    if exists && strings.HasPrefix(href, "http") {        crawlWebsite = href        response, err := http.Get(crawlWebsite)        if err != nil {            log.Fatalf("error on current website")        }        defer response.Body.Close()        document, err := goquery.NewDocumentFromReader(response.Body)        if err != nil {            log.Fatal("Error loading HTTP response body.", err)        }        document.Find("img").Each(func(index int, element *goquery.Selection) {            imgSrc, exists := element.Attr("src")            if strings.HasPrefix(imgSrc, "http") && exists {                fileName := fmt.Sprintf("./images/img" + strconv.Itoa(imageCount) + ".jpg")                currWebsite := fmt.Sprint(imgSrc)                fmt.Println("[+]", currWebsite)                DownloadFile(fileName, currWebsite)                imageCount++            }        })    }}func main() {    err := os.MkdirAll("./images/", 0777)    if err != nil {        log.Fatalln("error on creating directory")    }    response, err := http.Get(currWebsite)    if err != nil {        log.Fatalln("error on searching website")    }    defer response.Body.Close()    document, err := goquery.NewDocumentFromReader(response.Body)    if err != nil {        log.Fatalln("Error loading HTTP response body. ", err)    }
查看完整描述

1 回答

?
函數(shù)式編程

TA貢獻1807條經(jīng)驗 獲得超9個贊

(即使我不理解我得到的圖像,因為我在網(wǎng)站上找不到它們,似乎爬蟲不是從網(wǎng)站的起始頁開始的)。


是的,你是對的。您的代碼不會從起始頁下載圖像,因為它從起始頁獲取的唯一內(nèi)容是所有錨點標(biāo)記元素,然后調(diào)用在起始頁上找到的每個錨點元素 -processElement()


response, err := http.Get(currWebsite)

if err != nil {

    log.Fatalln("error on searching website")

}


defer response.Body.Close()


document, err := goquery.NewDocumentFromReader(response.Body)

if err != nil {

    log.Fatalln("Error loading HTTP response body. ", err)

}


document.Find("a").Each(processElement) // Here

要從起始頁下載所有圖像,您應(yīng)該定義另一個函數(shù)來執(zhí)行獲取元素和下載圖像的工作,但是在函數(shù)中,您只需要獲取鏈接并在該鏈接上調(diào)用 -processUrl()imgprocessElement()hrefprocessUrl()


func processElement(index int, element *goquery.Selection) {

    href, exists := element.Attr("href")

    if exists && strings.HasPrefix(href, "http") {

        crawlWebsite = href

        processUrl(crawlWebsite)

    }

}


func processUrl(crawlWebsite string) {

    response, err := http.Get(crawlWebsite)

    if err != nil {

        log.Fatalf("error on current website")

    }


    defer response.Body.Close()


    document, err := goquery.NewDocumentFromReader(response.Body)

    if err != nil {

        log.Fatal("Error loading HTTP response body.", err)

    }


    document.Find("img").Each(func(index int, element *goquery.Selection) {

        imgSrc, exists := element.Attr("src")

        if strings.HasPrefix(imgSrc, "http") && exists {

            fileName := fmt.Sprintf("./images/img" + strconv.Itoa(imageCount) + ".jpg")

            currWebsite := fmt.Sprint(imgSrc)

            fmt.Println("[+]", currWebsite)

            DownloadFile(fileName, currWebsite)

            imageCount++

        }

    })

}

現(xiàn)在只需在處理所有鏈接之前從起始頁抓取圖像 -


func main() {

    ...

    document, err := goquery.NewDocumentFromReader(response.Body)

    if err != nil {

        log.Fatalln("Error loading HTTP response body. ", err)

    }

    // First crawl images from start page url

    processUrl(currWebsite)

    document.Find("a").Each(processElement)

}


查看完整回答
反對 回復(fù) 2022-09-12
  • 1 回答
  • 0 關(guān)注
  • 132 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號