กำลัง Colly เว็บ scraper เป็นบางครั้งต่อเมื่อต้องใช้ตารางงานของอยู่ไป

0

คำถาม

ฉันกำลังทำอะไรบางเว็บขันโดยใช้ 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

ขอบคุณสำหรับแก้ปัญหาเรื่องการใช้หัวสำหรับเป็นบางครั้งต่อเมื่อต้องโทรหามัน ฉันเพิ่ 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 ขวบ ที่ครั้งแล้วเป็นยัง uninitialized พวกเขาเราจะจัดหลังจากคนแรกการประมวลผล. สำหรับ"มันก็ยังหยุดหลังจากคนแรกที่เรียกว่า"-คุณหมายถึงกับหัว? ถ้างั้นมันหมายความว่าคุณไม่เคยกลับมาจาก scrapePls. ฉันขอแนะนำให้คุณตั้งค่า delve และก้าวผ่านของคุณโปรแกรมดังนั้นคุณสามารถเห็นสิ่งที่ผิดพลาด
caveman

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

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

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่