Я недавно вернулся к коду scopy, созданному несколько месяцев назад.
Целью кода было очистить некоторые продукты Amazon для данных, он работал так:
Давайте возьмемэта страница в качестве примера
https://www.amazon.com/s?k=mac+makeup&crid=2JQQNTWC87ZPV&sprefix=MAC+mak%2Caps%2C312&ref=nb_sb_ss_i_1_7
Код вводит каждый продукт этой страницы и получает данные с него, после того как он завершил сбор всех данных с этой страницы, он переместилсяк следующему (в данном случае стр. 2).
Эта последняя часть перестала работать.
У меня есть что-то подобное в правилах (мне пришлось переписать некоторые xpath, потому чтоони устарели)
import scrapy
import re
import string
import random
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
from scrapyJuan.items import GenericItem
from scrapy.exceptions import CloseSpider
from scrapy.http import Request
class GenericScraperSpider(CrawlSpider):
name = "generic_spider"
#Dominio permitido
allowed_domain = ['www.amazon.com']
search_url = 'https://www.amazon.com/s?field-keywords={}'
custom_settings = {
'FEED_FORMAT': 'csv',
'FEED_URI' : 'GenericProducts.csv'
}
rules = {
#Next button
Rule(LinkExtractor(allow =(), restrict_xpaths = ('//li[@class="a-last"]/a/@href') )),
#Every element of the page
Rule(LinkExtractor(allow =(), restrict_xpaths = ('//a[contains(@class, "a-link-normal") and contains(@class,"a-text-normal")]') ),
callback = 'parse_item', follow = False)
}
def start_requests(self):
txtfile = open('productosGenericosABuscar.txt', 'r')
keywords = txtfile.readlines()
txtfile.close()
for keyword in keywords:
yield Request(self.search_url.format(keyword))
def parse_item(self,response):
Это сработало, как месяц назад, но я не могу заставить его работать сейчас.
Есть идеи, что случилось?