Scrapy xpath не работает идеально, возвращает пустые данные - PullRequest
0 голосов
/ 26 мая 2019

Я пытаюсь почистить цену книги и автора с vitalsource.com.

Я успешно извлек заголовок, информацию об авторе и ISBN, но не могу узнать цену с веб-страницы.

Я не понимаю, почему я не могу получить данные, поскольку они все находятся на одной веб-странице.

Я гуглил и пробовал много часов, а сейчас уже 4:43, я устал и отчаиваюсь, пожалуйста, помогите мне.

пожалуйста, проверьте изображение для более подробной информации. Xpath нормально работает в синей области, но не работает в красной области

import scrapy
from VitalSource.items import VitalsourceItem
from scrapy.spiders import SitemapSpider

class VsSpider(scrapy.Spider):
    name = 'VS'
    allowed_domains = ['VitalSource.com']
    start_urls = ['https://www.vitalsource.com/products/cengage-unlimited-1st-edition-instant-access-1-cengage-unlimited-v9780357700006']

    def parse(self, response):
        item = VitalsourceItem()
        item['Ebook_Title'] = response.xpath('//*[@id="content"]/div[1]/div[1]/div[1]/div/div[2]/h1/text()').extract()[1].strip()
        item['Ebook_Author'] = response.xpath('//*[@id="content"]/div[1]/div[1]/div[1]/div/div[2]/p/text()').extract()[0].strip()
        item['Ebook_ISBN'] = response.xpath('//*[@id="content"]/div[1]/div[1]/div[1]/div/div[2]/ul/li[2]/h2/text()').extract()[0].strip()
        item['Ebook_Price'] = response.xpath('//*[@id="content"]/div[1]/div[1]/div[1]/div/div[2]/div/span[1]/span[3]/span[2]/text()')
        print(item)
        return item

Информация о результате:

{
 'Ebook_Author': 'by: Cengage Unlimited',
 'Ebook_ISBN': 'Print ISBN: \n 9780357700037, 0357700031',
 'Ebook_Price': [],
 'Ebook_Title': 'Cengage Unlimited, 1st Edition [Instant Access], 1 term (4 months)'
}

1 Ответ

1 голос
/ 27 мая 2019

Я не уверен, если вы хотите строго использовать xpath, но я опубликую, как это делается с помощью селектора xpath и css:

CSS:

response.css('.u-pull-sixth--right+ span::text').get().strip()

XPath:

response.xpath('/html[1]/body[1]/div[2]/main[1]/div[1]/div[1]/div[1]/div[1]/div[2]/div[1]/span[1]').xpath('//span[@class]//span[2]/text()').get().strip()

Результат:

{'Ebook_Price': '119.99'}
...