Нужна помощь с пауком YellowPages
Я новичок в области скрапа, мне удалось создать несколько пауков. Я хотел бы написать паука, который будет сканировать Желтые страницы, ища сайты, которые имеют ответ 404, паук работает нормально, однако, нумерация страниц не работает. Любая помощь будет высоко ценится. заранее спасибо
# -*- coding: utf-8 -*-
import scrapy
class SpiderSpider(scrapy.Spider):
name = 'spider'
#allowed_domains = ['www.yellowpages.com']
start_urls = ['https://www.yellowpages.com/search?search_terms=handyman&geo_location_terms=Miami%2C+FL']
def parse(self, response):
for listing in response.css('div.search-results.organic div.srp-listing'):
url = listing.css('a.track-visit-website::attr(href)').extract_first()
yield scrapy.Request(url=url, callback=self.parse_details)
# follow pagination links
next_page_url = response.css('a.next.ajax-page::attr(href)').extract_first()
next_page_url = response.urljoin(next_page_url)
if next_page_url:
yield scrapy.Request(url=next_page_url, callback=self.parse)
def parse_details(self,response):
yield{'Response': response,}
1 ответ
Решение
Я запустил ваш код и обнаружил, что есть некоторые ошибки. В первом цикле вы не проверяете значение url
а иногда это None
, Эта ошибка останавливает выполнение, поэтому вы думали, что разбиение на страницы не работает.
Вот рабочий код:
# -*- coding: utf-8 -*-
import scrapy
class SpiderSpider(scrapy.Spider):
name = 'spider'
#allowed_domains = ['www.yellowpages.com']
start_urls = ['https://www.yellowpages.com/search?search_terms=handyman&geo_location_terms=Miami%2C+FL']
def parse(self, response):
for listing in response.css('div.search-results.organic div.srp-listing'):
url = listing.css('a.track-visit-website::attr(href)').extract_first()
if url:
yield scrapy.Request(url=url, callback=self.parse_details)
next_page_url = response.css('a.next.ajax-page::attr(href)').extract_first()
next_page_url = response.urljoin(next_page_url)
if next_page_url:
yield scrapy.Request(url=next_page_url, callback=self.parse)
def parse_details(self,response):
yield{'Response': response,}