我有一个go colly项目,我用它来抓取多个链接,我从一个表中获取,如下所示:
func main() {
//db, err := sql.Open("postgres", "postgresql://postgres:postgres@localhost:5432/db?sslmode=disable")
dbutil.Init()
defer dbutil.Close()
db := dbutil.GetDB()
rows, err := db.Query("SELECT id, link FROM cities_table")
for rows.Next() {
for _, City := range cities {
c := colly.NewCollector(
colly.MaxDepth(1),
colly.Async(true),
)
extensions.RandomUserAgent(c)
c.Limit(&colly.LimitRule{DomainGlob: "*", Parallelism: 20})
spider(c, db, City)
baseURL := ThroughProxy(City)
c.Visit(baseURL.String())
c.Wait()
}
}
在这个例子中,我设置了Parallelism: 20
,但是因为我为每个记录创建了一个新的golly示例,并且因为maxDepth是1,所以它现在以并行模式工作。有没有什么方法可以并行运行这个爬虫程序并更快地得到结果?注意:如果我把这部分带出循环:
c := colly.NewCollector(
colly.MaxDepth(1),
colly.Async(true),
)
我的最大深度不是每个网站1。1为所有网站。
1条答案
按热度按时间jm81lzqq1#
看起来github.com/gocolly/colly/v2/queue是你需要的。
队列是一个请求队列,它使用收集器在多个线程中使用请求
下面的伪代码是从the official queue demo修改而来的: