चल Colly वेब खुरचनी का उपयोग कर समय-समय पर क्रॉन में जाओ

0

सवाल

मैं कर रहा था की कुछ वेब scraping का उपयोग कर colly चाहता था लेकिन इसे चलाने के लिए समय-समय पर क्रॉन का उपयोग कर. मैं बाहर की कोशिश एक बुनियादी दृष्टिकोण यह करने के लिए.

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

धन्यवाद के लिए समाधान के उपयोग के बारे में टिकर के लिए समय-समय पर यह कहते हैं. मैं जोड़ने के लिए किया था सी.प्रविष्टियों किया था और इस {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. बार कर रहे हैं अभी भी शुरू नहीं किया गया है, वे हम सेट किया जा के बाद से पहली निष्पादन. के लिए के रूप में "यह अभी भी बंद हो जाता है के बाद पहली कॉल" - क्या आप का मतलब के साथ टिकर? यदि हां, तो इसका मतलब है कि आप कभी नहीं से लौटने के scrapePls. मैं सुझाव है कि आप सेटअप तल्लीन और कदम के माध्यम से अपने कार्यक्रम तो आप देख सकते हैं, जहां चीजें गलत जाना
caveman

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में