Ich muss eine vordefinierte Liste der Kategorie URLs aufrufen. In jeder dieser Kategorien muss ich die Daten von der Seite extrahieren, gehe auch zum Link auf der nächsten Seite und extrahiere erneut.Scrap mehrere URLs und Seitenumbruch mit Scrapy
Ich habe diesen Beispielcode, aber etwas fehlt:
import scrapy
import re
class YellowBot(scrapy.Spider):
name = "yellow"
allowed_domains = ["www.yellowpages.com"]
start_urls = [
'http://www.yellowpages.com/b/category1/',
'http://www.yellowpages.com/b/category2/',
'http://www.yellowpages.com/b/category3/',
'http://www.yellowpages.com/b/category4/'
]
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.91 Safari/537.36'
}
def start_requests(self):
for url in self.start_urls:
yield scrapy.Request(
url=url,
headers=self.headers
)
def parse(self, response):
self.logger.info('- page %s', response.url)
ITEM_SELECTOR = 'ul.businesses li'
SOURCE_TYPE = 'pages'
for ficha in response.css(ITEM_SELECTOR):
ficha = {
'id' : ficha.xpath('normalize-space(.//@data-bid)').extract_first(),
'name' : ficha.css('.business-name ::text').extract_first(),
'description': ficha.xpath('.//div[@itemprop="description"]/text()').extract_first()
}
if ficha['id'] is not None:
yield ficha
next_page = response.css('.m-results-pagination li.last a::attr(href)').extract_first()
if next_page is not None:
yield scrapy.Request(
response.urljoin(next_page),
headers=self.headers
)
Es extrahiert nur die erste Kategorie (auch die folgenden Seiten durch den Pager): http://www.yellowpages.com/b/category1/
Aber es nicht verarbeitet die nächste Kategorie Seite: http://www.yellowpages.com/b/category2/
war es, dass (Rückruf). Es war nur eine Beispiel-Domäne. Vielen Dank! – geoDesarrollos