AttributeError в веб-очистке Scrapy - PullRequest
0 голосов
/ 25 апреля 2020

Я написал код для очистки сайта, но получил ошибку атрибута. Я новичок в изучении веб-страниц, поэтому не могли бы вы подсказать мне, как я могу исправить эту ошибку. вот сообщение об ошибке: AttributeError: у объекта 'str' нет атрибута 'xpath'

вот мой код:

# -*- coding: utf-8 -*-
import scrapy


class ShopSpider(scrapy.Spider):
    name = 'shop'
    allowed_domains = ['https://www.redbubble.com']
    start_urls = ['https://www.redbubble.com/shop/shower-curtains/']

    def parse(self, response):

        products = response.xpath("//a[@class='styles__link--2sYi3']").get()
        for product in products:
            product_url = product.xpath(".//img[@class='styles__image--2CwxX styles__productImage--3ZNPD styles__rounded--1lyoH styles__fluid--3dxe-']/@src").get()
            title = name = product.xpath(".//div[@class='styles__box--206r9 styles__paddingRight-0--fzRHs']/div[@class='styles__textContainer--1xehi styles__disableLineHeight--3n9Fg styles__nowrap--2Vk3A']/span/text()").get()
            yield {
                'name'  :   title,
                'url'   :   product_url
            }

Ответы [ 2 ]

0 голосов
/ 26 апреля 2020

Вот код, который работал для меня. Вы получили ошибку str, потому что не можете использовать response.xpath после строки. Вы должны использовать непосредственно в foor-l oop. Вот код, который я использовал. Вы также можете удалить разрешенные домены.

   import scrapy


class ShopSpider(scrapy.Spider):
    name = 'shop'
    start_urls = ['https://www.redbubble.com/shop/shower-curtains/']

    def parse(self, response):
         for product in response.xpath("//a[@class='styles__link--2sYi3']"):
            product_url = product.xpath(
                ".//img[@class='styles__image--2CwxX styles__productImage--3ZNPD styles__rounded--1lyoH styles__fluid--3dxe-']/@src").get()
            title = product.xpath(".//div[@class='styles__box--206r9 styles__paddingRight-0--fzRHs']/div[@class='styles__textContainer--1xehi styles__disableLineHeight--3n9Fg styles__nowrap--2Vk3A']/span/text()").get()
            yield {
                "title": title,
                "url": product_url
            }
0 голосов
/ 25 апреля 2020

Ошибка очевидна

Вы пытаетесь вызвать xpath метод из строки

Пожалуйста, измените

products = response.xpath("//a[@class='styles__link--2sYi3']").get()

на

products = response.xpath("//a[@class='styles__link--2sYi3']")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...