python - scraping - Cómo extraer etiquetas exactas en scrapy
scrapy tutorial (1)
Escribí una clase para scrapy para obtener el contenido de una página así:
#!/usr/bin/python
import html2text
from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
class StockSpider(BaseSpider):
name = "stock_spider"
allowed_domains = ["www.hamshahrionline.ir"]
start_urls = ["http://www.hamshahrionline.ir/details/261730/Health/publichealth"]
def parse(self, response):
hxs = HtmlXPathSelector(response)
# sample = hxs.select("WhatShouldIputHere").extract()[AndHere]
converter = html2text.HTML2Text()
converter.ignore_links = True
print converter.handle(sample)
Mi principal problema es el estado en que lo comenté.
¿Cómo puedo establecer la ruta y extraer el parámetro para eso?
¿Puedes guiarme sobre esto y darme algunos ejemplos?
Gracias
Primero debe decidir qué datos desea obtener de la página, definir una clase de Item
y un conjunto de Field
. Luego, para llenar campos de elementos con datos, necesita usar expresiones xpath
en el método parse()
de su spider.
Aquí hay un ejemplo que recupera todos los párrafos del cuerpo (todas las noticias, supongo):
from scrapy.item import Item, Field
from scrapy.spider import Spider
from scrapy.selector import Selector
class MyItem(Item):
content = Field()
class StockSpider(Spider):
name = "stock_spider"
allowed_domains = ["www.hamshahrionline.ir"]
start_urls = ["http://www.hamshahrionline.ir/details/261730/Health/publichealth"]
def parse(self, response):
sel = Selector(response)
paragraphs = sel.xpath("//div[@class=''newsBodyCont'']/p/text()").extract()
for p in paragraphs:
item = MyItem()
item[''content''] = p
yield item
Tenga en cuenta que estoy usando una clase de Selector
ya que HtmlXPathSelector
está en desuso. Además, estoy usando el método xpath()
lugar de select()
por el mismo motivo.
Además, tenga en cuenta que es mejor que extraiga su definición de Item
en una secuencia de comandos de python separada para seguir la estructura del proyecto de Scrapy .
Espero que ayude.