【发布时间】:2015-10-01 04:04:22
【问题描述】:
我想从一段相对简单的代码中提取信息,但是一些空白和<br> 标记在我的 json 文件中是错误的。
这是包含内容的主 div:
里面有代码:
<div class="caixanorm">
<div id="titulo">
<a href="http://quonde.com.br/club-4/" rel="bookmark" title="Link para CLUB 4">
<h2>CLUB 4</h2>
<h3 id="subtitulo">Academia </h3>
</a>
</div>
<div id="endereco">
(61) 3346-7423<br>
CRS 515, entrada W2
</div>
<div id="servecat">
Em <a href="http://quonde.com.br/asasul/esporte/academias/" rel="category tag">Academias</a> da <a href="http://quonde.com.br/quadras/516-515/" rel="tag">516 / 515</a> Sul
</div>
</div>
这是我的代码:
-item.py
import scrapy
class QuondeItem(scrapy.Item):
localizacao = scrapy.Field() #location
titulo = scrapy.Field() #title
subtitulo = scrapy.Field() #subtitle
telefone = scrapy.Field() #phone
endereco = scrapy.Field() #address
categoria = scrapy.Field() #category
quadra = scrapy.Field() #block
-my_spider.py
import scrapy
from quonde.items import QuondeItem
class MySpider(scrapy.Spider):
name = "quonde"
allowed_domains = ["quonde.com.br"]
start_urls = [
"http://quonde.com.br/quadras/516-515/",
]
def parse(self, response):
div = response.xpath('//div[@class="caixanorm"]')
items = []
for sel in div:
item = QuondeItem()
item['localizacao'] = sel.xpath('//h1[@class="inline"]/span/text()').extract()
item['titulo'] = sel.xpath('//div[@id="titulo"]/a/h2/text()').extract()
item['subtitulo'] = sel.xpath('//div[@id="titulo"]/a/h3/text()').extract()
item['telefone'] = sel.xpath('//div[@id="endereco"]/text()[1]').extract()
item['endereco'] = sel.xpath('//div[@id="endereco"]/text()[2]').extract()
item['categoria'] = sel.xpath('//div[@id="servecat"]/a[1]/text()').extract()
item['quadra'] = sel.xpath('//div[@id="servecat"]/a[@rel="tag"]/text()').extract()
items.append(item)
return items
正如我们所看到的,items.py 的第一个字段没有在 div 中描述,因为我希望他成为父项,其余的是他的子项......但是,这就是我得到的:@ 987654321@。电话和地址带有 HTML 字符和空格,我无法让每个块的位置成为所有其他块的父亲 ()。
除此之外,不知json本身的形成是否正确,例如title 0对应0 subtitle,只是不应该只在一个单元格中,对另一个单元格重复?
对不起英语,现在谢谢!
【问题讨论】:
标签: python json web-scraping scrapy