Я написал некоторый код для написания HTML-ссылок из результатов поиска на самом деле. Мой начальный URL-адрес - это http-адрес, который содержит список объявлений о работе. Я пытаюсь почистить URL для каждой вакансии, показанной на странице, и название работы. Моя проблема, кажется, является атрибутом titles = response.xpath
. Если я использую специфичный для работы атрибут, я получаю данные, но когда я использую атрибут, показанный ниже в моем коде, я ничего не получаю (даже заголовки столбцов). И это несмотря на то, что атрибут охватывает все, что мне нужно. Любая помощь приветствуется, так как я только начинающий.
Я вывожу в файл CSV, и я успешно использовал этот код в другом месте, поэтому мне интересно, не относится ли это к тому, как они кодировали целевую страницу URL. Это сводит меня с ума!
from scrapy.spiders import Spider
from scrapy.selector import Selector
from ICcom4.items import Scrape4Item
from scrapy.linkextractors import LinkExtractor
from scrapy.utils.response import get_base_url
from scrapy.spiders import CSVFeedSpider
import requests
class MySpider(Spider):
name = "Scrape4"
allowed_domains = ["indeed.co.uk"]
start_urls = ['http://www.indeed.co.uk/jobs?as_and=a&as_phr=&as_any=&as_not=IT+construction&as_ttl=Project+Manager&as_cmp=&jt=contract&st=&salary=%C2%A310K-%C2%A3999K&radius=25&l=&fromage=2&limit=50&sort=date&psf=advsrch',]
def parse(self, response):
titles = response.xpath('//div[@class="jobsearch-SerpJobCard row result clickcard"]')
items = []
for titles in titles:
item = Scrape4Item()
base_url = get_base_url(response)
home_url = ("http://www.indeed.co.uk")
item ['_pageURL'] = base_url
item ['role_titletext'] = titles.xpath('//h2/a/text()').extract()
items.append(item)
return items
Спасибо за руководство, Елена, но я боюсь, что ваши предложения не имеют значения. Я до сих пор не получаю никаких данных. Я разрешил дублирующую переменную ( для заголовков в заголовках1 ), которую я тестировал как отдельное изменение удовлетворительно. Однако другие предложения не имели никакого значения. Я также попытался запустить очистку только с запросом на возвращаемый URL, но он все еще не работал. Пересмотренный пример ниже.
from scrapy.spiders import Spider
from scrapy.selector import Selector
from ICcom4.items import Scrape4Item
from scrapy.linkextractors import LinkExtractor
from scrapy.utils.response import get_base_url
from scrapy.spiders import CSVFeedSpider
import requests
class MySpider(Spider):
name = "Scrape4"
allowed_domains = ["indeed.co.uk"]
start_urls = ['http://www.indeed.co.uk/jobs?as_and=a&as_phr=&as_any=&as_not=IT+construction&as_ttl=Project+Manager&as_cmp=&jt=contract&st=&salary=%C2%A310K-%C2%A3999K&radius=25&l=&fromage=2&limit=50&sort=date&psf=advsrch',]
def parse(self, response):
titles1 = response.css('div.jobsearch-SerpJobCard.row.result.clickcard')
#also tried as titles = response.css('div.jobsearch-SerpJobCard row result clickcard')
items = []
for titles in titles1:
item = Scrape4Item()
base_url = get_base_url(response)
home_url = ("http://www.indeed.co.uk")
item ['_pageURL'] = base_url
item ['role_titletext'] = titles.xpath('.//h2/a/text()').extract()
#also tried as item ['role_titletext'] = titles.css('h2 a::text').extract()
items.append(item)
return items
EDIT:
Спасибо тебе, Тьяго. Вот и сломалось! Ты суперзвезда!
Спасибо вам и Елене за терпение с новичком.
Просто чтобы завершить круг для кого-то еще, окончательный код, который я использовал, работал следующим образом. Это возвращает URL страницы поиска и название работы :-);
from scrapy.spiders import Spider
from scrapy.selector import Selector
from ICcom4.items import Scrape4Item
from scrapy.linkextractors import LinkExtractor
from scrapy.utils.response import get_base_url
from scrapy.spiders import CSVFeedSpider
import requests
class MySpider(Spider):
name = "Scrape4"
allowed_domains = ["indeed.co.uk"]
start_urls = ['http://www.indeed.co.uk/jobs?as_and=a&as_phr=&as_any=&as_not=IT+construction&as_ttl=Project+Manager&as_cmp=&jt=contract&st=&salary=%C2%A310K-%C2%A3999K&radius=25&l=&fromage=2&limit=50&sort=date&psf=advsrch',]
def parse(self, response):
titles = response.css('.jobsearch-SerpJobCard')
items = []
for titles in titles:
item = Scrape4Item()
base_url = get_base_url(response)
home_url = ("http://www.indeed.co.uk")
item ['_pageURL'] = base_url
item ['role_titletext'] = title.xpath('.//h2/a/@title').extract()
items.append(item)
return items