2016-12-16 4 views
1

Я новичок в scrapy и XPath, но программирование на Python на некоторое время. Я хотел бы получить email, name of the person making the offer и phone номер со страницы https://www.germanystartupjobs.com/job/joblift-berlin-germany-3-working-student-offpage-seo-french-market/ с помощью scrapy. Как вы видите, электронная почта и телефон предоставляются как текст внутри тега <p>, и это затрудняет извлечение.Как получить описание работы с помощью scrapy?

Моя идея заключается в том, чтобы сначала получить текст внутри Job Overview или, по крайней мере, весь текст говорить об этом соответствующей работы и использовать ReGex, чтобы получить email, phone number и, если возможно name of the person.

Итак, я запустил scrapy shell с помощью команды: scrapy shell https://www.germanystartupjobs.com/job/joblift-berlin-germany-3-working-student-offpage-seo-french-market/ и получить response оттуда.

Теперь я пытаюсь получить весь текст из div job_description, где я фактически ничего не получаю. Я использовал

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

Он возвращает [u'\t\t\t\n\t\t ']

Как получить весь текст на странице упоминается? Очевидно, задача будет позже, чтобы получить атрибуты, упомянутые ранее, но, во-первых, сначала.

Update: Этот выбор только возвращает []response.xpath('//div[@class="job_description"]/div[@class="container"]/div[@class="row"]/text()').extract()

enter image description here

+2

после ДИВ [@ класс = «job_description»] вы сразу же перейти к Div [@ класс = «контейнер»], так что вы пропустили один элемент, называемый "раздел". вы можете использовать его в запросе xpath или использовать //, например. div [@ class = "job_description"] // div [@ class = "container"]/..... – Borna

ответ

2

Вы были близки с

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

div -tag на самом деле не имеет никакого текста, кроме того, что вы получите.

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

Как вы видите, текст, который вы получаете с response.xpath('//div[@class="job_description"]/text()').extract() текст, который находится между в divв тег, а не между тегами внутри div в тег. Для этого вам потребуется:

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

Что это делает он выбирает все дочерние-узлы из div[@class="job_description] и возвращает текст (см here для того, что делают различные XPaths).

Вы увидите, что это возвращает много бесполезного текста, так как вы все еще получаете все \n и другие. Для этого я предлагаю вам сузить свой xpath до элемента, который вы хотите, вместо того, чтобы делать широкий подход.

Например, вся описание работы будет в

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

Спасибо за ваш добрый ответ. Я опубликовал следующий вопрос, который может быть интересным для вас ответить 'http: // stackoverflow.com/ questions/41194574/how-to-find-all-the-jobs-lists-in-a-website' – Chak

 Смежные вопросы

  • Нет связанных вопросов^_^