실행 Colly 웹 스크레이퍼를 사용하여 정기적으로 크론에서 가

0

질문

하고 있었다 몇몇 웹 긁어를 사용하여 colly 하지만 그것을 실행하고 싶었을 주기적으로 사용하 cron. 나는 시도는 기본적인 접근 방식이다.

type scraper struct {
    coll *colly.Collector
    rc   *redis.Client
}

func newScraper(c *colly.Collector, rc *redis.Client) scraper {
    return scraper{coll: c, rc: rc}
}

func main() {
    rc := redis.NewClient(&redis.Options{
        Addr:     "localhost:3000",
        Password: "", // no password set
        DB:       0,  // use default DB
    })

    coll := colly.NewCollector()

    scrape := newScraper(coll, rc)

    c := cron.New()
    c.AddFunc("@every 10s", scrape.scrapePls)
    c.Start()

    sig := make(chan int)
    <-sig
}

func (sc scraper) scrapePls() {
    sc.coll.OnHTML(`body`, func(e *colly.HTMLElement) {
        //Extracting required content

        //Using Redis to store data
    })

    sc.coll.OnRequest(func(r *colly.Request) {
        log.Println("Visting", r.URL)
    })

    sc.coll.Visit("www.example.com")
}

그것은 작동하지 않게 전화를 한 번지 않는 정기적으로 다음 호출합니다. 가 확실하지 않으면 나는 누락에 무언가이다. 은 다른 접근을 취할 수 있는?

어떤 도움을 감사하겠습니다.

감사합니다!

cron go go-colly web-scraping
2021-11-13 06:06:49
1

최고의 응답

0

c.AddFunc 반환합니다 error 고 있는지 확인하십시오 않는 경우에는 추가 정보를 제공합니다.

할 수 있어야의 반환 검사 c.Entries() 을 제공해야 하는 당신은 정보에 대해 다음의 함수가 호출됩니다.

는 경우에 당신,당신이 필요하지 않 전체 라이브러리를 달성하는 실행하는 기능이 정기적으로 실시합니다. 할 수 있는 예를 들어:

scrap := newScraper(coll, rc)

sig := make(chan os.Signal, 1)
signal.Notify(sig, os.Interrupt)
ticker := time.NewTicker(10 * time.Second)

// Run the function initially, so we don't have to wait 10 seconds for the first run (optional).
scrapePls()
for {
    select {
    case <-ticker.C:
        // Ticker will send a message every 10 seconds
        scrapePls()

        // You can also start a go routine every time. If scrapePls takes more than the interval
        // to run this may lead to issues to due to an forever increasing number of goroutines.
        // go scrapePls()
        
    case <-sig
        return
    }
}
2021-11-13 11:57:51

에 대한 감사 솔루션 사용에 대해 시세를 주기적으로 호출합니다. 를 추가 않았 c.항목과를 얻었 이 {1 {30s} 0001-01-01 00:00:00 +0000 UTC 0001-01-01 00:00:00 +0000 UTC 0x6efa80 0x6efa80}]. 이 유용하지 않습니다. 이 도움이 되나요?
Adith Dev Reddy

그것은 여전히 멈춘 후 첫 번째 호출합니다.
Adith Dev Reddy

무엇 c.Entries 쇼가 그것이 예정이 단 30 초마다,모든 10. 시간은 여전히 초기화되지 않은,그들은 우리가 설정한 후 처음 실행합니다. 으로"이것은 여전히 멈춘 후 첫 번째 통화"-신과 ticker? 그렇다면,이것은 결코에서 돌아 scrapePls. 나는 당신을 추천한 설정을 탐구한 단계를 통해 귀하의 프로그램 그래서 당신이 볼 수있는 것이 잘못
caveman

다른 언어로

이 페이지는 다른 언어로되어 있습니다

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................