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