亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Scrapy返回垃圾數據,例如空格和換行符。我該如何過濾?

Scrapy返回垃圾數據,例如空格和換行符。我該如何過濾?

海綿寶寶撒 2021-05-11 13:14:30
我寫了一個蜘蛛,它返回的數據充滿了空格和換行符。換行符還導致extract()方法以列表形式返回。在觸摸選擇器之前如何過濾它們?之后過濾這些extract()稱為DRY原則,因為我需要從頁面中提取很多數據,這些數據是無屬性的,這使得解析它的唯一方法是通過索引。我該如何過濾?它會返回錯誤的數據,像這樣{ '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',
查看完整描述

2 回答

?
叮當貓咪

TA貢獻1776條經驗 獲得超12個贊

查看您的代碼,您可以嘗試使用xpaths normalize-space

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

*未經測試,但似乎合法。

對于更一般的答案,yourString.strip('someChar')yourString.replace('this','withThis')效果很好(但在使用json對象進行操作的情況下,它可能不如其他方法有效)。如果這些字符出現在原始數據中,則需要手動將其刪除或跳過它們。


查看完整回答
反對 回復 2021-05-25
?
qq_花開花謝_0

TA貢獻1835條經驗 獲得超7個贊

換行符還導致extract()方法作為列表返回

導致這種行為的原因不是換行符,而是節點在文檔樹中出現的方式。由元素節點分隔的文本節點(例如)<a>, <br>, <hr>被視為單獨的實體,并且scrappy會按這樣生成它們(實際上extract(),即使僅選擇了單個節點,也應該總是返回列表)。XPath具有幾個基本的值處理/過濾功能,但是它非常有限。

在調用extract()之后對它們進行過濾會破壞DRY原理

您似乎相信,過濾這些輸出的唯一正確方法是在選擇器表達式中執行此操作。但是,如此嚴格地講這些原則是沒有用的,您是從目標節點內部選擇文本節點,這些文本節點必然具有過多的空白或散布在其容器的各處。按內容進行XPath篩選非常緩慢,因此應在其外部進行。后期處理報廢字段是一種常見做法。您可能想閱讀有關刮板式裝載機和處理器的信息

否則,最簡單的方法是:

# 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())


查看完整回答
反對 回復 2021-05-25
  • 2 回答
  • 0 關注
  • 315 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號