Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Scrapy返回诸如空格和换行符之类的垃圾数据。我该如何过滤这些?_Python_Scrapy - Fatal编程技术网

Python Scrapy返回诸如空格和换行符之类的垃圾数据。我该如何过滤这些?

Python Scrapy返回诸如空格和换行符之类的垃圾数据。我该如何过滤这些?,python,scrapy,Python,Scrapy,我写了一个spider,它返回的数据中充满了空格和换行符。换行符还导致extract()方法作为列表返回。在触摸选择器之前,如何过滤这些内容?调用extract()后过滤这些内容打破了枯燥的原则,因为我需要从页面中提取大量无属性的数据,这使得解析这些数据的唯一方法是通过索引 我如何过滤这些 它返回这样的错误数据 { 'aired': ['\n ', '\n Apr 3, 2016 to Jun 26, 2016\n '], 'broadcast': [], 'duration':

我写了一个spider,它返回的数据中充满了空格和换行符。换行符还导致
extract()
方法作为列表返回。在触摸选择器之前,如何过滤这些内容?调用
extract()
后过滤这些内容打破了枯燥的原则,因为我需要从页面中提取大量无属性的数据,这使得解析这些数据的唯一方法是通过索引

我如何过滤这些

它返回这样的错误数据

{ 'aired': ['\n  ', '\n  Apr 3, 2016 to Jun 26, 2016\n  '],  
 'broadcast': [],  'duration': ['\n  ', '\n  24 min. per ep.\n  '],  'episodes': ['\n  ', '\n  13\n  '],  'favourites': ['\n  ', '\n  22,673\n'],  'genres': ['Action', 'Comedy', 'School', 'Shounen', 'Super Power'],  'image_url': ['https://myanimelist.cdn-dena.com/images/anime/10/78745.jpg',
               'https://myanimelist.cdn-dena.com/images/anime/10/78745.jpg',
               'https://myanimelist.cdn-dena.com/images/anime/10/78745.jpg',
               'https://myanimelist.cdn-dena.com/images/anime/10/78745.jpg',
               'https://myanimelist.cdn-dena.com/images/anime/10/78745.jpg',
               'https://myanimelist.cdn-dena.com/images/anime/10/78745.jpg',
               'https://myanimelist.cdn-dena.com/images/anime/10/78745.jpg',
               'https://myanimelist.cdn-dena.com/images/anime/10/78745.jpg',
               'https://myanimelist.cdn-dena.com/images/anime/10/78745.jpg',
               'https://myanimelist.cdn-dena.com/images/anime/10/78745.jpg',
               'https://myanimelist.cdn-dena.com/images/anime/10/78745.jpg',
               'https://myanimelist.cdn-dena.com/images/anime/10/78745.jpg',
               'https://myanimelist.cdn-dena.com/images/anime/10/78745.jpg',
               'https://myanimelist.cdn-dena.com/images/anime/10/78745.jpg',
               'https://myanimelist.cdn-dena.com/images/anime/10/78745.jpg'],  'licensors': ['Funimation'],  'members': ['\n  ', '\n    818,644\n'],  'popularity': ['\n  ', '\n  #21\n'],  'premiered': ['Spring 2016'],  'producers': ['Dentsu',
               'Mainichi Broadcasting System',
               'Movic',
               'TOHO animation',
               'Shueisha'],  'ranked': ['\n  ', '\n  #135', '\n    ', '\n'],  'rating': ['\n  ', '\n  PG-13 - Teens 13 or older\n  '],  'score': ['8.44'],  'source': ['\n  ', '\n  Manga\n  '],  'status': ['\n  ', '\n  Finished Airing\n  '],  'studios': ['Bones'],  'title': 'Boku no Hero Academia',  'type': ['TV']}

编辑:到源代码的链接与发布时不同,要查看代码,然后查看提交

查看代码,可以尝试使用XPath规范化空间

mal_item['aired']=border_class.xpath('normalize-space(.//div[11]/text())).extract()

*未经测试,但似乎合法

对于更一般的答案,
yourString.strip('someChar')
yourString.replace('this','withThis')
效果很好(但在这种情况下,它可能不如其他方法有效)。如果原始数据中存在这些字符,则需要手动删除或跳过它们

换行符还导致extract()方法作为列表返回

导致这种行为的原因不是换行,而是节点在文档树中的显示方式。由元素节点分隔的文本节点,例如

否则,最简单的方法是:

# import re
...


def join_clean(texts):
    return re.sub(r'\s+', ' ', ' '.join(texts)).strip()

...

mal_item['type'] = join_clean(border_class.xpath('.//div[8]/a/text()').extract())

请发布您的代码。请参阅源代码,它是指向该文件的直接链接。这是一个很棒的xpath函数。它解决了我的另一个问题,因为我用了另一种方法来过滤它。我使用for循环,而不是将一堆相同的语句插入到项中。唯一的问题是,如果他们在border_类上添加class=“dark_text”的新数据,它将中断。我现在可能会推送代码,所以如果你愿意,请随意查看。它看起来很难看,我将在明天折射它。我确实通过对以前的大多数代码应用DRY来解决这个问题,所以现在我在提取它们之后应用过滤器。请再看看我的代码,看看你的想法。加载器和处理器,看起来很有趣,我会玩一点。我担心它看起来比以前的版本更糟糕。你减少了行数和视觉上的“重复性”,使用了一种更难掌握的密集结构,并且在站点更改html时更难维护。另外,相信标记中存在的键将1:1与预期的项模式相关联也不是最好的主意。坦率地说,我认为在很多情况下,清晰性比干巴巴的要好,如果严格遵守设计原则,那么最终可能会花费不足够的时间来编写非常复杂但100%冗余的代码特技。如果说得有点刺耳,道歉。可能说得太快了,你这样做其实没关系。无视咆哮的语气。是的,这也是我在我的帖子中解释的,但我认为在本文中对脱衣舞的使用解释得更好。@JohnSmith,你能告诉我你为什么在第一次陈述中使用“360”吗?我同意这很难阅读,特别是如果你不参考HTML文档,我会尝试折射并添加一些注释。但是,我更喜欢这种方法,因为第一种方法使用索引,如果在最后一个子div以外的位置添加了新的子div,则会破坏它。