source scraping pages open library example español crawling crawler python xml web-scraping scrapy

python - scraping - Uso de Scrapy para la página XML



web scraping open source (1)

Su archivo XML está utilizando el espacio de nombres " http://www.do-it.org.uk/volunteering-opportunity " para seleccionar el title , el name , etc. tiene 2 opciones:

  • use xxs.remove_namespaces() una vez y luego use .select("./title") , .select("./description") etc.
  • o registre el espacio de nombres una vez, con un prefijo como "doit", xxs.register_namespace("doit", "http://www.do-it.org.uk/volunteering-opportunity") , y luego use .select("./doit:title") , .select("./doit:description") etc.

Para obtener más detalles sobre los espacios de nombres XML, consulte esta página en las Preguntas frecuentes y esta página en los documentos.

Estoy tratando de raspar varias páginas de una API para practicar y desarrollar mi desguace de XML. Un problema que ha surgido es que cuando trato de borrar un documento con el formato siguiente: http://i.imgur.com/zJqeYvG.png y lo almaceno como un XML, no lo hace.

Entonces dentro de la CMD obtiene la URL que crea el archivo XML en mi computadora pero no tiene nada.

¿Cómo lo arreglaría para hacer eco de todo el documento o partes de él?

Puse el código a continuación:

from scrapy.spider import BaseSpider from scrapy.selector import XmlXPathSelector from doitapi.items import DoIt import random class MySpider(BaseSpider): name = "craig" allowed_domains = ["do-it.org.uk"] start_urls = [] number = [] for count in range(100): number.append(random.randint(2000000,2500000)) for i in number: start_urls.append("http://www.do-it.org.uk/syndication/opportunities/%d?apiKey=XXXXX-XXXX-XXX-XXX-XXXXX" %i) def parse(self, response): xxs = XmlXPathSelector(response) titles = xxs.register_namespace("d", "http://www.do-it.org.uk/volunteering-opportunity") items = [] for titles in titles: item = DoIt() item ["url"] = response.url item ["name"] = titles.select("//d:title").extract() item ["description"] = titles.select("//d:description").extract() item ["username"] = titles.select("//d:info-provider/name").extract() item ["location"] = titles.select("//d:info-provider/address").extract() items.append(item) return items