2 функции в скрапе паука и вторая не работает - PullRequest
0 голосов
/ 22 февраля 2019

Я использую scrapy для получения содержимого внутри некоторых URL-адресов на странице, аналогично следующему вопросу: Используйте scrapy, чтобы получить список URL-адресов, а затем очищать содержимое внутри этих URL-адресов

Я могу получить subURL из моих стартовых URL-адресов (первое определение), однако, мое второе определение не проходит.И файл результатов пуст.Я проверил содержимое внутри функции в scrapy shell, и он получает информацию, которую я хочу, но не когда я запускаю паука.

import scrapy
from scrapy.selector import Selector
#from scrapy import Spider
from WheelsOnlineScrapper.items import Dealer
from WheelsOnlineScrapper.url_list import urls
import logging
from urlparse import urljoin

logger = logging.getLogger(__name__)

class WheelsonlinespiderSpider(scrapy.Spider):
	logger.info('Spider starting')
	name = 'wheelsonlinespider'
	rotate_user_agent = True # lives in middleware.py and settings.py
	allowed_domains = ["https://wheelsonline.ca"]
	start_urls = urls # this list is created in url_list.py
	logger.info('URLs retrieved') 

	def parse(self, response):

		subURLs = []
		
		partialURLs = response.css('.directory_name::attr(href)').extract()
		
		for i in partialURLs:
			
			subURLs = urljoin('https://wheelsonline.ca/', i)
			yield scrapy.Request(subURLs, callback=self.parse_dealers)
			logger.info('Dealer ' + subURLs + ' fetched')



	def parse_dealers(self, response):


		logger.info('Beginning of page')
		
        dlr = Dealer()
		
	    #Extracting the content using css selectors
		try: 
			dlr['DealerName'] = response.css(".dealer_head_main_name::text").extract_first() + ' ' + response.css(".dealer_head_aux_name::text").extract_first()
		except TypeError:
			dlr['DealerName'] = response.css(".dealer_head_main_name::text").extract_first()

		dlr['MailingAddress'] = ','.join(response.css(".dealer_address_right::text").extract()) 
		dlr['PhoneNumber'] = response.css(".dealer_head_phone::text").extract_first()

		logger.info('Dealer fetched ' + dlr['DealerName'])
		
		yield dlr


		logger.info('End of page')

1 Ответ

0 голосов
/ 22 февраля 2019

Ваш список allowed_domains содержит протокол (https).Он должен иметь только доменное имя согласно документации :

allowed_domains = ["wheelsonline.ca"]

Кроме того, вы должны были получить сообщение в своем журнале:

URLWarning: allow_domains принимает только домены, а не URL.Игнорирование записи URL https://wheelsonline.ca в разрешенных_доменах

...