首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何消除Scrapy Spider数据中的空白

如何消除Scrapy Spider数据中的空白
EN

Stack Overflow用户
提问于 2013-04-16 23:34:11
回答 2查看 5.9K关注 0票数 5

我正在用Scrapy编写我的第一个爬虫,并尝试遵循文档。我已经实现了ItemLoaders。爬行器提取数据,但数据包含许多行返回。我尝试了许多方法来删除它们,但似乎都不起作用。replace_escape_chars实用程序应该可以工作,但我不知道如何在ItemLoader中使用它。还有一些人使用(unicode.strip),但同样,我似乎不能让它工作。一些人试图在items.py中使用它们,而另一些人则在爬虫中使用它们。如何清除这些行返回的数据(\r\n)?我的items.py文件只包含项目名称和字段()。爬虫代码如下:

代码语言:javascript
复制
from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from scrapy.contrib.loader import XPathItemLoader
from scrapy.utils.markup import replace_escape_chars
from ccpstore.items import Greenhouse

class GreenhouseSpider(BaseSpider):
    name = "greenhouse"
    allowed_domains = ["domain.com"]
    start_urls = [
        "http://www.domain.com",
    ]

    def parse(self, response):
        items = []
        l = XPathItemLoader(item=Greenhouse(), response=response)
        l.add_xpath('name', '//div[@class="product_name"]')
        l.add_xpath('title', '//h1')
        l.add_xpath('usage', '//li[@id="ctl18_ctl00_rptProductAttributes_ctl00_liItem"]')
        l.add_xpath('repeat', '//li[@id="ctl18_ctl00_rptProductAttributes_ctl02_liItem"]')
        l.add_xpath('direction', '//li[@id="ctl18_ctl00_rptProductAttributes_ctl03_liItem"]')
        items.append(l.load_item())

        return items
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-18 02:54:41

事实证明,数据中也有许多空格,因此将Steven的答案与一些更多的研究相结合,可以删除所有标签、行回车和重复空格。工作代码如下所示。请注意,加载器行上添加了text(),它删除了标记以及用于删除空格和换行符的拆分和联接处理器。

代码语言:javascript
复制
def parse(self, response):
        items = []
        l = XPathItemLoader(item=Greenhouse(), response=response)
        l.default_input_processor = MapCompose(lambda v: v.split(), replace_escape_chars)
        l.default_output_processor = Join()
        l.add_xpath('title', '//h1/text()')
        l.add_xpath('usage', '//li[@id="ctl18_ctl00_rptProductAttributes_ctl00_liItem"]/text()')
        l.add_xpath('repeat', '//li[@id="ctl18_ctl00_rptProductAttributes_ctl02_liItem"]/text()')
        l.add_xpath('direction', '//li[@id="ctl18_ctl00_rptProductAttributes_ctl03_liItem"]/text()')
        items.append(l.load_item())
        return items        
票数 3
EN

Stack Overflow用户

发布于 2013-04-17 00:01:33

您可以在加载器上使用default_output_processor,也可以在单个字段上使用其他处理器,请参见title

代码语言:javascript
复制
from scrapy.spider import BaseSpider
from scrapy.contrib.loader import XPathItemLoader
from scrapy.contrib.loader.processor import Compose, MapCompose
from w3lib.html import replace_escape_chars, remove_tags
from ccpstore.items import Greenhouse

class GreenhouseSpider(BaseSpider):
    name = "greenhouse"
    allowed_domains = ["domain.com"]
    start_urls = ["http://www.domain.com"]

    def parse(self, response):
        l = XPathItemLoader(Greenhouse(), response=response)
        l.default_output_processor = MapCompose(lambda v: v.strip(), replace_escape_chars)
        l.add_xpath('name', '//div[@class="product_name"]')
        l.add_xpath('title', '//h1', Compose(remove_tags))
        l.add_xpath('usage', '//li[@id="ctl18_ctl00_rptProductAttributes_ctl00_liItem"]')
        l.add_xpath('repeat', '//li[@id="ctl18_ctl00_rptProductAttributes_ctl02_liItem"]')
        l.add_xpath('direction', '//li[@id="ctl18_ctl00_rptProductAttributes_ctl03_liItem"]')

        return l.load_item()
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16041158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档