goの並列処理は関数の前にgoを付ければいいのですが、ヘッドレスブラウザを立ち上げて並列でクロールをするやり方がググっても見つからなかったため、ご存知の方がいれば教えていただけないでしょうか?
下記のコードですと結構もっさりして並列の恩恵を感じられないのですがどのようにすれば良いのでしょうか?
firefoxの方が早いなどアドバイスをいただければと持っています。
よろしくお願いいたします。
Google Chrome 83.0.4103.97
ChromeDriver 83.0.4103.39
go version go1.13
package main import ( "fmt" "strings" "time" "github.com/PuerkitoBio/goquery" "github.com/sclevine/agouti" ) var pageMap map[string]*agouti.Page = make(map[string]*agouti.Page) func hoge(sites [][]string) { for _, site := range sites { driver := agouti.ChromeDriver( agouti.ChromeOptions("args", []string{ "--disable-dev-shm-usage", "--disable-gpu", "--headless", "--no-sandbox", "--single-process", "--window-size=10,10", }), ) err := driver.Start() if err != nil { fmt.Println("driver.Start()") fmt.Println(err) } go huga(site, driver) } time.Sleep(time.Second * 120) } func huga(site []string, driver *agouti.WebDriver) { page, exist := pageMap[site[1]] if !exist { tempPage, err := driver.NewPage(agouti.Browser("chrome")) if err != nil { fmt.Println("driver.NewPage") fmt.Println(err) return } pageMap[site[1]] = tempPage page = tempPage } err2 := page.Navigate(site[1]) if err2 != nil { fmt.Println("page.Navigate") fmt.Println(err2) return } getSource, err := page.HTML() if err != nil { fmt.Println("page.HTML()") fmt.Println(err) return } readerCurContents := strings.NewReader(getSource) doc, err := goquery.NewDocumentFromReader(readerCurContents) if err != nil { fmt.Println("goquery.NewDocumentFromReader") fmt.Println(err) return } doc.Find(site[2]).Each(func(index int, selection *goquery.Selection) { fmt.Println(selection.Text()) }) } func main() { sites := [][]string{ {"サイト名1", "サイトURL1", "body"},//サイト名、サイトURL、スクレイピング箇所のセレクタ {"サイト名2", "サイトURL2", "body"}, {"サイト名3", "サイトURL3", "body"}, {"サイト名4", "サイトURL4", "body"}, {"サイト名5", "サイトURL5", "body"}, } hoge(sites) }
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/16 06:36
2020/07/16 08:05
2020/07/16 10:44
2020/07/17 15:56