Scrapy редактировать редактировать ссылку, извлеченную из правила - PullRequest
0 голосов
/ 06 июля 2019

Я тестирую на amazon для анализа продуктов, хочу проанализировать продукты, я получил правильный xpath для продуктов, но я хочу отредактировать его так, чтобы он соответствовал "https://www.amazon.com/dp/{}".format("ASIN"), то есть, удалив некоторые дополнительные элементы из ссылки, я также получил регулярное выражение для этого, но scrapy показывает ошибку, когда я использую process_value из Link Extractors . Как я могу это исправить?

from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from scrapy.loader import ItemLoader
from myamazon.items import MyamazonItem
from scrapy.loader import ItemLoader
import re
class AmazonSpider(CrawlSpider):
    name = 'amazon'
    allowed_domains = ['amazon.com']
    start_urls = ['http://amazon.com/']


    rules = (Rule(LinkExtractor(restrict_xpaths='//li[@class="a-last"]/a/@href')),
            Rule(LinkExtractor(restrict_xpaths='//a[@class="a-link-normal a-text-normal"]'),callback="parse",
                process_value= lambda i:f"https://www.amazon.com/dp/{re.search('dp/(.*)/',i).groups()[0]}")
        )

ошибка:

    process_value= lambda i:re.serach('dp/(.*)/',i).groups()[0])
TypeError: __init__() got an unexpected keyword argument 'process_value'

1 Ответ

1 голос
/ 06 июля 2019

Похоже, вы пытаетесь использовать параметр process_value в Rule() вместо LinkExtractor().

Давайте отформатируем ваш код:

rules = (
    Rule(
        LinkExtractor(
            restrict_xpaths='//li[@class="a-last"]/a/@href'
        )
    ),
    Rule(
        LinkExtractor(
                restrict_xpaths='//a[@class="a-link-normal a-text-normal"]'
        ),
        callback="parse",
        process_value= lambda if: "https://www.amazon.com/dp/{re.search('dp/(.*)/',i).groups()[0]}"
     )
)

Здесь более очевидно, что process_value используется в Rule(). scrapy.spiders.Rule не ожидает process_value, но LinkExtractor делает.

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