2016-04-15 5 views
1

Я пытаюсь очистить информацию о некоторых объявлениях работы от www.upwork.comScrapy Xpath чуть изменяющиеся страницы

Большинства из них может быть Царапинами простого Xpath, но в связи с тем , что некоторые страницы имеют дополнительные предметы (страна клиента, количество набранных клиентов и т. д.) или немного отличаются (задания с фиксированной ставкой, которые добавляют элемент цены на работу)

Это разрушает Xpath предметов.

Элементы не имеют описательных имен классов, которые вы можете использовать, как вы можете видеть в исходном коде страницы.

Работа с фиксированной ставкой с большим количеством деталей о клиенте https://www.upwork.com/job/Education-portal-development_~0151e2b32662a05e13/

почасовой работы с меньшим количеством деталей клиента: https://www.upwork.com/job/Create-countdown-timer-which-resets-every-night_~01d2dad2d68abd7b8d/

Некоторые примеры элементов и XPath:

l.add_xpath('clientactivehires', '//*[@id="layout"]/div[2]/div[3]/div[2]/p[5]/span/text()', re = '(\d*) Active') 
l.add_xpath('fixedratevariable', '//*[@id="layout"]/div[2]/div[3]/div[1]/div[1]/div[2]/div/div[2]/p/strong/text()') 
l.add_xpath('fixedrate', '//*[@id="layout"]/div[2]/div[3]/div[1]/div[1]/div[2]/div/div[2]/p/strong/text()') 
l.add_xpath('hired', '//*[@id="layout"]/div[2]/div[3]/div[1]/div[2]/div[2]/div[1]/div/p[3]/span/text()', re = '(\d*)') 
l.add_xpath('interviewing', '//*[@id="layout"]/div[2]/div[3]/div[1]/div[2]/div[2]/div[1]/div[2]/p[3]/text()', re = '(\d*)') 
l.add_xpath('jobdescription', '//*[@id="layout"]/div[2]/div[3]/div[1]/div[2]/div[1]/p/text()') 

I пробовал много вещей, но с xpath я не могу заставить его работать, он работает на 1 странице, но не работает над другими.

Что мне делать, чтобы заставить это работать?

ответ

0

я бы полагаться на «О клиенте» текст, а не получать все из следующих p братьев и сестер:

$ scrapy shell https://www.upwork.com/job/Education-portal-development_~0151e2b32662a05e13/ 

>>> for item in response.xpath("//p[strong = 'About the Client']/following-sibling::p"): 
...  print(" ".join(map(unicode.strip, item.xpath(".//text()").extract()))) 
... 
India Bangalore 
      07:28 PM 
3 
     Jobs Posted 0% Hire Rate, 
     1 Open Job 

Возможно, потребуется, чтобы улучшить логику и группу эта дополнительная информация.