好斗的空 csv/json
Scrappy empty csv/json
我开始使用scrapy了。我按照文档中的教程编写代码。当我运行输出一个json或者一个csv时,输出的文件是空的。当我在 shell 中测试我的选择器时,我得到了数据。我会 post 我的代码:
import scrapy
class QuotesSpider(scrapy.Spider):
name = "adororomance"
start_urls = [
'http://www.adororomances.com.br/arromances.php?cod=01',
]
def parse(self, response):
for livro in response.xpath('//*[@id="page_livro_coluna"]'):
yield {
'titulo':
livro.xpath(
'//*[@id="page_livro_coluna"]/div[1]/h1/text()').extract_first(),
'autor(a)':
livro.xpath(
'//*[@id="page_livro_coluna"]/div[2]/span/a/span/h2/text()').extract_first(),
'titulo original':
livro.xpath(
'//*[@id="page_livro_coluna"]/div[3]/text()').extract_first(),
'coleção':
livro.xpath(
'//*[@id="page_livro_coluna"]/div[4]/h3/a/text()').extract_first(),
'publicação':
livro.xpath(
'//*[@id="page_livro_coluna"]/div[4]/div[1]/span[1]/text()').extract_first(),
'ano':
livro.xpath(
'//*[@id="page_livro_coluna"]/div[4]/div[1]/span[2]/text()').extract_first(),
'série':
livro.xpath(
'//*[@id="page_livro_coluna"]/div[4]/div[2]/a/span/text()').extract_first(),
'descrição':
livro.css(
'//*[@id="description"]/text()')
.extract_first(),
}
通过测试,我发现如果我删除 json 渲染,'descrição'
会破坏代码。当我在 shell 中放置选择器时,我得到:
['\r\n\t\t\t\t \r\n\t\t\t\t Ser sequestrada por um sheik árabe nem passou pela cabeça de Diane, ao visitar o deserto do Saara. Porém, foi o que aconteceu. Khasim ben Haran era um homem poderoso e arrogante, cujo único objetivo, ao fazer dela sua prisioneira, era vingar a morte da mãe. No entanto, esse mesmo homem que a aterrorizava, com ameaças cruéis, também a fascinava. E a figura altiva e exótica não saía da mente de Diane nem por um instante... \r\n \r\n ']
还有一个问题:这个换行符 \r\n\t
会在我的 json 中呈现吗?如果是,我该如何摆脱它们?
谢谢
首先,livro.css('//*[@id="description"]/text()').extract_first(),
应该是livro.xpath('//*[@id="description"]/text()').extract_first(),
。在 css 选择器中使用 xpath 会引发一个异常,该异常会终止抓取过程,这可能就是您在输出中什么也得不到的原因。
其次,像 \r\n\t
这样的换行符将保留在您的 json 文件中,它们将根据您用来检查 json 文件的软件呈现或不呈现。如果你想删除那么你可以使用strip()
函数:
livro.xpath('//*[@id="description"]/text()').extract_first().strip()
请注意,如果 xpath 没有找到任何信息,它将 return None
和 strip()
失败,在这种情况下,您将不得不添加额外的检查确保该值不是 None
我开始使用scrapy了。我按照文档中的教程编写代码。当我运行输出一个json或者一个csv时,输出的文件是空的。当我在 shell 中测试我的选择器时,我得到了数据。我会 post 我的代码:
import scrapy
class QuotesSpider(scrapy.Spider):
name = "adororomance"
start_urls = [
'http://www.adororomances.com.br/arromances.php?cod=01',
]
def parse(self, response):
for livro in response.xpath('//*[@id="page_livro_coluna"]'):
yield {
'titulo':
livro.xpath(
'//*[@id="page_livro_coluna"]/div[1]/h1/text()').extract_first(),
'autor(a)':
livro.xpath(
'//*[@id="page_livro_coluna"]/div[2]/span/a/span/h2/text()').extract_first(),
'titulo original':
livro.xpath(
'//*[@id="page_livro_coluna"]/div[3]/text()').extract_first(),
'coleção':
livro.xpath(
'//*[@id="page_livro_coluna"]/div[4]/h3/a/text()').extract_first(),
'publicação':
livro.xpath(
'//*[@id="page_livro_coluna"]/div[4]/div[1]/span[1]/text()').extract_first(),
'ano':
livro.xpath(
'//*[@id="page_livro_coluna"]/div[4]/div[1]/span[2]/text()').extract_first(),
'série':
livro.xpath(
'//*[@id="page_livro_coluna"]/div[4]/div[2]/a/span/text()').extract_first(),
'descrição':
livro.css(
'//*[@id="description"]/text()')
.extract_first(),
}
通过测试,我发现如果我删除 json 渲染,'descrição'
会破坏代码。当我在 shell 中放置选择器时,我得到:
['\r\n\t\t\t\t \r\n\t\t\t\t Ser sequestrada por um sheik árabe nem passou pela cabeça de Diane, ao visitar o deserto do Saara. Porém, foi o que aconteceu. Khasim ben Haran era um homem poderoso e arrogante, cujo único objetivo, ao fazer dela sua prisioneira, era vingar a morte da mãe. No entanto, esse mesmo homem que a aterrorizava, com ameaças cruéis, também a fascinava. E a figura altiva e exótica não saía da mente de Diane nem por um instante... \r\n \r\n ']
还有一个问题:这个换行符 \r\n\t
会在我的 json 中呈现吗?如果是,我该如何摆脱它们?
谢谢
首先,livro.css('//*[@id="description"]/text()').extract_first(),
应该是livro.xpath('//*[@id="description"]/text()').extract_first(),
。在 css 选择器中使用 xpath 会引发一个异常,该异常会终止抓取过程,这可能就是您在输出中什么也得不到的原因。
其次,像 \r\n\t
这样的换行符将保留在您的 json 文件中,它们将根据您用来检查 json 文件的软件呈现或不呈现。如果你想删除那么你可以使用strip()
函数:
livro.xpath('//*[@id="description"]/text()').extract_first().strip()
请注意,如果 xpath 没有找到任何信息,它将 return None
和 strip()
失败,在这种情况下,您将不得不添加额外的检查确保该值不是 None