Scrapy возвращает одни и те же данные первой строки в каждой строке вместо отдельных данных для каждой строки

#scrapy

#scrapy

Вопрос:

Я написал простой scrape с использованием scrapy, но он продолжает возвращать первый экземпляр целевых данных вместо правильных данных в каждой строке из каждого экземпляра целевых данных. В этом случае он возвращает первую ссылку для всех очищенных заданий с веб-сайта Indeed вместо правильной ссылки для каждого задания.

Я пробовал как использовать (div), так и избегать (.//div) абсолютных путей, а также использовать [0] в конце строки. Без [0] он возвращает все данные из всех строк в каждой ячейке.

Ссылка на пример исходных данных; https://www.indeed.co.uk/jobs?as_and=aamp;as_phr=amp;as_any=amp;as_not=IT constructionamp;as_ttl=Project Manageramp;as_cmp=amp;jt=contractamp;st=amp;salary=£30K-£460Kamp;radius=25amp;fromage=2amp;limit=50amp;sort=dateamp;psf=advsrch

Целевые данные: href=»/rc/clk?jk= 56e4f5164620b6daamp;fccid= 6920a3604c831610amp;vjs = 3″

Целевые данные со страницы

 <div class="title">
    <a target="_blank" id="jl_56e4f5164620b6da" href="/rc/clk?jk=56e4f5164620b6daamp;amp;fccid=6920a3604c831610amp;amp;vjs=3" onmousedown="return rclk(this,jobmap[0],1);" onclick=" setRefineByCookie(['radius', 'jobtype', 'salest']); return rclk(this,jobmap[0],true,1);" rel="noopener nofollow" title="Project Manager" class="jobtitle turnstileLink " data-tn-element="jobTitle">
        <b>Project</b> <b>Manager</b></a>
  

Вот мой код

 def parse(self, response):
    titles = response.css('div.jobsearch-SerpJobCard')
    items = []
    for title in titles:
        item = ICcom4Item()
        home_url = ("http://www.indeed.co.uk")
        item ['role_title_link'] = titles.xpath('div[@class="title"]/a/@href').extract()[0] 

        items.append(item)
    return items
  

Мне просто нужна правильная ссылка для каждого задания. Приветствуется любая помощь!

Ответ №1:

Проблема в строке ниже:

 item ['role_title_link'] = titles.xpath('div[@class="title"]/a/@href').extract()[0] 
  

Вместо titles.xpath этого вы должны использовать title.xpath , как показано ниже:

 item ['role_title_link'] = title.xpath('div[@class="title"]/a/@href').extract()[0] 
  

Затем ваш код очистит ссылку для каждого задания, как вы хотите.

Комментарии:

1. Большое вам спасибо, mthrsj, вот и все! Извините, что беспокоил вас такой небольшой проблемой с вашей точки зрения. Я работал над этим часами 🙁

2. Добро пожаловать @Jamwg! Не волнуйтесь, это случается иногда!