Scrapy - Копирование только xpath в файл .csv - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть много других скриптов с базовым кодом simlar, которые работают, но когда я запускаю этого паука в cmd и открываю файл .csv, чтобы посмотреть сохраненные «заголовки», я получаю xpath, скопированный в excel.Любая идея, почему?

import scrapy


class MovieSpider(scrapy.Spider):
    name = 'movie'
    allowed_domains = ['https://www.imdb.com/search/title?start=1']
    start_urls = ['https://www.imdb.com/search/title?start=1/']

    def parse(self, response):
        titles = response.xpath('//*[@id="main"]/div/div/div[3]/div[1]/div[3]/h3/a')
        pass
        print(titles)


        for title in titles:
            yield {'Title': title}

--- Попробуйте два ниже: ------

for subject in titles:
            yield {
                'Title': subject.xpath('.//h3[@class="lister-item-header"]/a/text()').extract_first(),
                'Runtime': subject.xpath('.//p[@class="text-muted"]/span/text()').extract_first(),
                'Description': subject.xpath('.//p[@class="text-muted"]/p/text()').extract_first(),
                'Director': subject.xpath('.//*[@id="main"]/a/text()').extract_first(),
                'Rating': subject.xpath('.//div[@class="inline-block ratings-imdb-rating"]/strong/text()').extract_first()
            }

1 Ответ

0 голосов
/ 20 сентября 2018

Используйте extract() или extract_first(), также используйте более короткую и емкую запись для xpath:

import scrapy


class MovieSpider(scrapy.Spider):
    name = 'movie'
    allowed_domains = ['https://www.imdb.com/search/title?start=1']
    start_urls = ['https://www.imdb.com/search/title?start=1/']

    def parse(self, response):
        subjects = response.xpath('//div[@class="lister-item mode-advanced"]')

        for subject in subjects:
            yield {
                'Title': subject.xpath('.//h3[@class="lister-item-header"]/a/text()').extract_first(),
                'Rating': subject.xpath('.//div[@class="inline-block ratings-imdb-rating"]/strong/text()').extract_first(),
                'Runtime': subject.xpath('.//span[@class="runtime"]/text()').extract_first(),
                'Description': subject.xpath('.//p[@class="text-muted"]/text()').extract_first(),
                'Directior': subject.xpath('.//p[contains(text(), "Director")]/a[1]/text()').extract_first(),
            }

выход:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...