Ví dụ, khi Crawl dữ liệu từ shopee, với trường dữ liệu: Đã bán 1,1k , muốn chuyển đổi về số 1100 để lưu vào Database, bạn sẽ cần:
- Xóa chuỗi
Đã bán - Chuyển dấu phẩy
,thành dấu chấm. - Chuyển chuỗi có ký tự
kthành000(nghìn), hoặcmthành000000(triệu)…
Sử dụng nó ở đâu?
Trong ví dụ này, tôi sử dụng nó với ItemLoader
Trong tệp items.py
# items.py
import scrapy
from scrapy.loader import ItemLoader
from itemloaders.processors import TakeFirst, MapCompose
from w3lib.html import remove_tags
# # Xóa Đã bán
def remove_daban(value):
return value.replace('Đã bán ', '')
# Thay dấu , thành dấu .
def replace_comma(value):
return value.replace(',', '.')
# chuyển k to 000. Lưu ý chữ hoa và chữ thường
def value_to_float(x):
if type(x) == float or type(x) == int:
return x
if 'k' in x:
if len(x) > 1:
return float(x.replace('k', '')) * 1000
return 1000.0
if 'M' in x:
if len(x) > 1:
return float(x.replace('M', '')) * 1000000
return 1000000.0
if 'B' in x:
return float(x.replace('B', '')) * 1000000000
return x
class ShopeeProduct(scrapy.Item):
# ... một số items khác
sold = scrapy.Field(
input_processor = MapCompose(remove_tags, remove_daban, replace_comma, value_to_float),
output_processor = TakeFirst()
)
Dữ liệu trước và sau khi chuyển đổi:
# Trước khi chuyển đổi
price,sale_price,sold,title
209000,418000,702,Bộ Thể Thao Nam Chất Nỉ Co Giãn Thời Trang Cao Cấp ZERO
169000,298000,1.1k,Quần Thể Thao Nam Trẻ Trung Thời Trang ZERO
144000,300000,3.5k,Bộ Mặc Nhà Thể Thao Nam Mùa Hè Mát Mẻ Cao Cấp Zero 4 Màu
190000,358000,1.4k,Bộ Nỉ Nam Thể Thao Thiết Kế Khỏe Khoắn Thời Trang VICERO
109000,238000,735,Áo Len Nam Mỏng Giữ Nhiệt Phong Cách Trẻ Trung Lịch Lãm 5 Màu Trơn Thời Trang VICERO
# Sau khi chuyển đổi
price,sale_price,sold,title
209000,418000,702,Bộ Thể Thao Nam Chất Nỉ Co Giãn Thời Trang Cao Cấp ZERO
169000,298000,1100.0,Quần Thể Thao Nam Trẻ Trung Thời Trang ZERO
144000,300000,3500.0,Bộ Mặc Nhà Thể Thao Nam Mùa Hè Mát Mẻ Cao Cấp Zero 4 Màu
190000,358000,1400.0,Bộ Nỉ Nam Thể Thao Thiết Kế Khỏe Khoắn Thời Trang VICERO
109000,238000,735,Áo Len Nam Mỏng Giữ Nhiệt Phong Cách Trẻ Trung Lịch Lãm 5 Màu Trơn Thời Trang VICERO
[size=2]Nguồn tham khảo: https://stackoverflow.com/questions/39684548/convert-the-string-2-90k-to-2900-or-5-2m-to-5200000-in-pandas-dataframe[/size]