我寫了一個蜘蛛,它返回的數據充滿了空格和換行符。換行符還導致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個贊

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())
添加回答
舉報
0/150
提交
取消