spider sitemapspider requests mercado libre item create scrapy

requests - scrapy sitemapspider



Cómo ordenar la salida de csv de scrapy al usar los archivos item pipeline (2)

Después de mucha ayuda de la comunidad SO, tengo un rastreador de scrapy que guarda la página web del sitio que rastrea, pero me gustaría limpiar el archivo csv que se crea --output

Una fila de muestra se ve actualmente como

"[{''url'': ''http://example.com/page'', ''path'': ''full/hashedfile'', ''checksum'': ''checksumvalue''}]",http://example.com/page,2016-06-20 16:10:24.824000,http://example.com/page,My Example Page

¿Cómo obtengo que el archivo csv contenga detalles en 1 archivo por línea (sin URL adicional) y el valor de ruta incluye una extensión como .html o .txt?

my items.py es el siguiente

class MycrawlerItem(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field() title = scrapy.Field() crawldate = scrapy.Field() pageurl = scrapy.Field() files = scrapy.Field() file_urls = scrapy.Field()

Mi devolución de reglas es

def scrape_page(self,response): page_soup = BeautifulSoup(response.body,"html.parser") ScrapedPageTitle = page_soup.title.get_text() item = MycrawlerItem() item[''title''] =ScrapedPageTitle item[''crawldate''] = datetime.datetime.now() item[''pageurl''] = response.url item[''file_urls''] = [response.url] yield item

En el registro de rastreador, se muestra

2016-06-20 16:10:26 [scrapy] DEBUG: Scraped from <200 http://example.com/page> {''crawldate'': datetime.datetime(2016, 6, 20, 16, 10, 24, 824000), ''file_urls'': [''http://example.com/page''], ''files'': [{''checksum'': ''checksumvalue'', ''path'': ''full/hashedfile'', ''url'': ''http://example.com/page''}], ''pageurl'': ''http://example.com/page'', ''title'': u''My Example Page''}

La estructura ideal para cada línea de csv sería

crawldate, file_url, file_path, title


Pude evitar la necesidad de limpiar los datos csv especificando la opción de salida xml en lugar de csv

La salida como .xml y luego la importación a Excel me dio un conjunto de datos más limpio de 1 fila por página y sin caracteres de puntuación adicionales para preprocesar


Si desea formatos personalizados, tal vez desee simplemente utilizar tuberías de artículos de gran calidad.

en los métodos de tuberías process_item o close_spider puede escribir su artículo en el archivo. Me gusta:

def process_item(self, item, spider): if not getattr(spider, ''csv'', False): return item with open(''{}.csv''.format(spider.name), ''a'') as f: writer = csv.writer(f) writer.writerow([item[''crawldate''],item[''title'']]) return item

Esto escribirá el <spider_name>.csv cada vez que ejecute la araña con la bandera csv , es decir, scrapy crawl twitter -a csv=True

Puedes hacerlo más eficiente si abres un archivo en el método spider_open y lo cierras en spider_close , pero es lo mismo si no lo spider_close .