2016-12-16 4 views
1

Ich bin neu in scrapy und XPath aber Programmierung in Python für irgendwann. Ich möchte die email, name of the person making the offer und phone Nummer von der Seite https://www.germanystartupjobs.com/job/joblift-berlin-germany-3-working-student-offpage-seo-french-market/ mit scrapy bekommen. Wie Sie sehen, werden die E-Mail und das Telefon als Text innerhalb des Tags <p> bereitgestellt, was die Extraktion erschwert.Wie bekomme ich die Jobbeschreibung mit scrapy?

Meine Idee ist es, zuerst den Text innerhalb des Job Overview oder zumindest den gesamten Text zu erhalten reden über diese jeweiligen Job und verwenden ReGex die email zu bekommen, phone number und wenn möglich die name of the person.

Also habe ich die scrapy shell mit dem Befehl: scrapy shell https://www.germanystartupjobs.com/job/joblift-berlin-germany-3-working-student-offpage-seo-french-market/ gefeuert und von dort die response bekommen.

Jetzt versuche ich den ganzen Text von der div job_description wo ich eigentlich nichts bekommen. Ich benutzen

full_des = response.xpath('//div[@class="job_description"]/text()').extract() 

Die Rückgabe [u'\t\t\t\n\t\t ']

Wie werde ich die gesamte Text von der Seite erwähnt? Offensichtlich wird die Aufgabe danach kommen, um die zuvor erwähnten Attribute zu bekommen, aber, zuerst die Dinge zuerst.

Update: Diese Auswahl liefert nur []response.xpath('//div[@class="job_description"]/div[@class="container"]/div[@class="row"]/text()').extract()

enter image description here

+2

nach dem div [@ class = "job_description"] sein würde, Sie sofort div gehen [@ class = "container"], so übersprungen Sie ein Element namens "Sektion". Sie können es in der XPath-Abfrage einfügen oder //, z. div [@ class = "job_description"] // div [@ class = "container"]/..... – Borna

Antwort

2

Sie mit

der Nähe waren
full_des = response.xpath('//div[@class="job_description"]/text()').extract() 

Die div -tag tatsächlich hat keinen Text außer dem, was man bekommt.

<div class="job_description" (...)> 
    "This is the text you are getting" 
    <p>"This is the text you want"</p> 
</div> 

Wie Sie sehen, der Text, den Sie mit response.xpath('//div[@class="job_description"]/text()').extract() immer ist der Text, zwischen der div -tag, nicht zwischen den Tags in der div -tag. Dazu müssten Sie:

response.xpath('//div[@class="job_description"]//*/text()').extract() 

Was dies tut, ist es, alle Kind-Knoten von div[@class="job_description] wählt und gibt den Text (siehe here für das, was die verschiedenen XPaths tun).

Sie werden sehen, dass dies viel nutzlosen Text auch zurückgibt, wie Sie immer noch alle \n und so. Dafür schlage ich vor, dass Sie Ihren xpath auf das Element beschränken, das Sie möchten, anstatt einen breiten Ansatz zu machen.

Zum Beispiel die gesamte Job-Beschreibung in

response.xpath('//div[@class="col-sm-5 justify-text"]//*/text()').extract() 
+0

Danke für deine freundliche Antwort. Ich habe eine Follow-up-Frage gestellt, die für Sie interessant sein könnte, um "http: // stackoverflow.com/questions/41194574/how-to-find-all-the-jobs-gelistete-in-einer-website" zu beantworten – Chak

Verwandte Themen