Heim  >  Artikel  >  Backend-Entwicklung  >  Wie greife ich über Web Scraping auf dynamische HTML-Elemente zu?

Wie greife ich über Web Scraping auf dynamische HTML-Elemente zu?

王林
王林nach vorne
2024-02-09 09:51:17338Durchsuche

如何通过网页抓取访问动态 HTML 元素?

php-Editor Xiaoxin ist hier, um eine Methode für den Zugriff auf dynamische HTML-Elemente durch Web-Crawling vorzustellen. Beim Crawlen von Webseiten stoßen wir manchmal auf dynamisch generierte Inhalte, die erst beim Laden der Webseite direkt abgerufen werden können. Glücklicherweise gibt es Tools und Techniken, mit denen wir dieses Problem lösen können. In diesem Artikel wird eine PHP-basierte Methode vorgestellt, mit der dynamische HTML-Elemente einfach gecrawlt und darauf zugegriffen werden kann. Lass uns einen Blick darauf werfen!

Frageninhalt

Ich verwende Go-Rod zum Web-Scraping. Ich möchte auf Links im Feed zugreifen 3499910bf9dac5ae3c52d5ede7383485. Um dies zu machen a 可见,我必须完成一个搜索器,它是一个 input ,具有下一个格式(没有 submit):

<form>
    <input> <!--this is the searcher-->
<form/>

Wenn ich also fertig bin, möchte ich auf Folgendes zugreifen a:

Bis hierher ist alles in Ordnung. Dies ist der Code, den ich zum Vervollständigen der Suche verwendet habe:

//page's url
page := rod.new().mustconnect().mustpage("https://www.sofascore.com/")

//acept cookies alert
page.mustelement("cookiesalertselector...").mustclick()

//completes the searcher
el := page.mustelement(`searcherselector...`)
el.mustinput("lionel messi")

Jetzt tritt das Problem auf, wenn ich auf das a klicken möchte, das nach Abschluss der Suche erscheint.

Ich habe Folgendes versucht:

diviwant := page.mustelement("aselector...")
diviwant.mustclick()

Und das:

diviwant := page.mustelement("aselector...").mustwaitvisible()
diviwant.mustclick()

Allerdings erhalte ich bei allen den gleichen Fehler:

panic: {-32000 node is detached from document }
goroutine 1 [running]:
github.com/go-rod/rod/lib/utils.glob..func2({0x100742dc0?,
0x140002bad50?})
/users/lucastomicbenitez/go/pkg/mod/github.com/go-rod/[email&#160;protected]/lib/utils/utils.go:65
+0x24 github.com/go-rod/rod.gene.func1({0x14000281ca0?, 0x1003a98b7?, 0x4?})
/users/lucastomicbenitez/go/pkg/mod/github.com/go-rod/[email&#160;protected]/must.go:36
+0x64 github.com/go-rod/rod.(*element).mustclick(0x14000289320)   /users/lucastomicbenitez/go/pkg/mod/github.com/go-rod/[email&#160;protected]/must.go:729
+0x9c main.main()     /users/lucastomicbenitez/development/golang/evolutionaryalgorithm/main/main.go:22
+0x9c exit status 2

Auf der Suche nach Lösungen bin ich auf dieses Github-Problem gestoßen und habe versucht, den Link über diese Methode zu erhalten:

link := page.musteval(`()=> document.queryselector('aselector...').href`)

Aber es gibt Folgendes zurück:

panic: eval js error: TypeError: Cannot read properties of null
(reading 'href')

Ich bin mir jedoch ziemlich sicher, dass der Selektor korrekt ist. Was habe ich falsch gemacht?

Workaround

Wie @hymns for disco in den Kommentaren sagte, musste ich einfach eine Weile warten, nachdem die Suche beendet war.

el.MustInput("Lionel Messi")

time.Sleep(time.Second)

link := page.MustEval(`()=> document.querySelector('aSelector...').href`)

Das obige ist der detaillierte Inhalt vonWie greife ich über Web Scraping auf dynamische HTML-Elemente zu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen