J'ai été bloqué sur ce problème pendant des heures. Je ne pouvais pas suivre les liens sur ce site en utilisant la syntaxe de la règle, donc j'ai trouvé manuellement tous les liens dont j'avais besoin pour faire une demande. Même si j'ai testé que les liens extraits sont des URL valides, mon robot d'exploration n'explore pas les pages supplémentaires. J'ai été bloqué dessus pendant des heures. Je ne trouve pas non plus que la documentation sur Scrapy soit aussi utile car elle est présentée dans une carte de mots parfaite. Quelqu'un peut-il m'aider?Scrawy crawler ne suit pas les liens même lorsque je les collecte et les analyse
# -*- coding: utf-8 -*-
import scrapy
import logging
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
from scrapy import Request
from banker.items import BarclaysOfferItem
class BarclaySpider(CrawlSpider):
name = "barclay"
allowed_domains = ['partners.barclaycardrewardsboost.com/']
start_urls = [
'https://partners.barclaycardrewardsboost.com/shopping/sp____.htm?rows=25&page=1&ref_page_id=2167&ref_section_id=9720&ref_section_title=All%\20Online%\20Offers'
# 'https://partners.barclaycardrewardsboost.com/shopping/sp____.htm?rows=25&page=2&ref_page_id=2167&ref_section_id=9720&ref_section_title=All%\20Online%\20Offers'
# 'https://partners.barclaycardrewardsboost.com/shopping/sp____.htm?rows=25&page=3&ref_page_id=2167&ref_section_id=9720&ref_section_title=All%\20Online%\20Offers',
# 'https://partners.barclaycardrewardsboost.com/shopping/sp____.htm?rows=25&page=4&ref_page_id=2167&ref_section_id=9720&ref_section_title=All%\20Online%\20Offers',
# 'https://partners.barclaycardrewardsboost.com/shopping/sp____.htm?rows=25&page=5&ref_page_id=2167&ref_section_id=9720&ref_section_title=All%\20Online%\20Offers',
# 'https://partners.barclaycardrewardsboost.com/shopping/sp____.htm?rows=25&page=6&ref_page_id=2167&ref_section_id=9720&ref_section_title=All%\20Online%\20Offers',
# 'https://partners.barclaycardrewardsboost.com/shopping/sp____.htm?rows=25&page=7&ref_page_id=2167&ref_section_id=9720&ref_section_title=All%\20Online%\20Offers'
]
def parse(self, response):
base = 'https://partners.barclaycardrewardsboost.com/shopping/sp____.htm'
links = response.xpath('//p[contains(@class, "mn_pageLinks")]/a')
for sel in links:
url = base + str(sel.xpath('@href').extract()[0])
logging.info(url)
yield scrapy.Request(url, callback=self.parse_item)
def parse_item(self, reponse):
for sel in response.xpath('//table/tr'):
item = BarclaysOfferItem()
item['merchant'] = sel.xpath('td/div/a[last()]/text()').extract()
item['rate'] = sel.xpath('td/span/a/text()').extract()
item['offer'] = sel.xpath('td/a[last()]/text()').extract()
item['coupon_code'] = sel.xpath('td[@class="mn_cpCode"]/text()').extract()
item['expiration_date'] = sel.xpath('td[@class="mn_expiry"]/text()').extract()
yield item
Mise à jour # 1
Retrait de la liste allowed_urls
a obtenu mes demandes de travail. Cependant maintenant je continue à obtenir NameError: global name 'response' is not defined
.