python - tutorial - Diferencia de araña de Scrapy entre páginas rastreadas y artículos raspados
scrapy mercadolibre (1)
Estoy escribiendo un Scrapy CrawlSpider que lee una lista de anuncios en la primera página, toma algo de información como los pulgares de los listados y las direcciones de AD, luego da una solicitud a cada una de estas direcciones de AD para tomar sus detalles.
Estaba trabajando y paginando aparentemente bien en el entorno de prueba, pero hoy tratando de hacer una carrera completa me di cuenta de que en el registro:
Rastreó 3852 páginas (a 228 páginas / min), raspó 256 elementos (a 15 elementos / min)
No entiendo la razón de esta gran diferencia entre las páginas rastreadas y los artículos raspados. ¿Alguien puede ayudarme a darme cuenta de dónde se están perdiendo esos artículos?
Mi código araña:
class MySpider(CrawlSpider):
name = "myspider"
allowed_domains = ["myspider.com", "myspider.co"]
start_urls = [
"http://www.myspider.com/offers/myCity/typeOfAd/?search=fast",
]
#Pagination
rules = (
Rule (
SgmlLinkExtractor()
, callback=''parse_start_url'', follow= True),
)
#1st page
def parse_start_url(self, response):
hxs = HtmlXPathSelector(response)
next_page = hxs.select("//a[@class=''pagNext'']/@href").extract()
offers = hxs.select("//div[@class=''hlist'']")
for offer in offers:
myItem = myItem()
myItem[''url''] = offer.select(''.//span[@class="location"]/a/@href'').extract()[0]
myItem[''thumb''] = oferta.select(''.//div[@class="itemFoto"]/div/a/img/@src'').extract()[0]
request = Request(myItem[''url''], callback = self.second_page)
request.meta[''myItem''] = myItem
yield request
if next_page:
yield Request(next_page[0], callback=self.parse_start_url)
def second_page(self,response):
myItem = response.meta[''myItem'']
loader = myItemLoader(item=myItem, response=response)
loader.add_xpath(''address'', ''//span[@itemprop="streetAddress"]/text()'')
return loader.load_item()
Digamos que vas a tus primeras start_urls
(en realidad solo tienes una) y en esta página solo hay un enlace de anclaje ( <a>
). Entonces tu araña rastrea la url href
en este enlace y obtienes el control en tu devolución de llamada, parse_start_url
. Y dentro de esta página tienes 5000 div''s con una clase hlist
. Y supongamos que todas las 5000 de estas URL posteriores fueron devueltas 404, no encontradas.
En este caso, tendrías:
- Páginas rastreadas: 5001
- Artículos raspados: 0
Tomemos otro ejemplo: en su página de inicio de url tiene 5000 anclas, pero ninguna (como en cero) de esas páginas tiene ningún divs con un parámetro de clase de hlist
.
En este caso, tendrías:
- Páginas rastreadas: 5001
- Artículos raspados: 0
Su respuesta se encuentra en la salida de registro de DEPURACIÓN.