파충류에서 데이터 세척을 진행하다

2587 단어 파충류
일반적으로 데이터베이스에 저장된 데이터는 모두 세척해야 하지만 분석 페이지에서 데이터에 대한 세척은 비교적 번거롭고 난잡하다. 이런 경우 scrapy의 scrapy.loader가 잘 해결할 수 있어요.다음은 데이터 세척 코드입니다. 먼저 분석 페이지입니다.
import scrapy
from scrapy import Request
from scrpy_item.items import CountryItem,CountryItemLoader

class CitySpider(scrapy.Spider):
    name = 'city'
    allowed_domains = ['example.com']
    def __init__(self):
        self.urls = ['http://example.webscraping.com/places/default/view/China-47']

def start_requests(self):
        for url_str in self.urls:
            yield Request(url_str,callback=self.parse,dont_filter=True)

    def parse(self, response):
        item = CountryItemLoader(item=CountryItem(),response=response)
        #           
        item.add_css('title','tr#places_country__row td.w2p_fw::text')
        #item.add_xpath
        item.add_css('population','tr#places_population__row td.w2p_fw::text')
        item.add_css('capital','tr#places_capital__row td.w2p_fw::text')
        return item.load_item()

청소는items에서 진행
import scrapy
from scrapy import Field
from scrapy.loader import ItemLoader
from scrapy.loader.processors import MapCompose,TakeFirst,Join

def str_convert(value):
    return 'country_' + value
def get_nums(value):
    return value.replace(',','')

def str_capital(value):
    return 'capital_' + value

class CountryItemLoader(ItemLoader):
    #                ,TakeFirst        ,   extract_fitst()
    default_output_processor = TakeFirst()

class CountryItem(scrapy.Item):
    #         ,          str_convert,      
    title = Field(input_processor = MapCompose(str_convert),)
    population = Field(input_processor=MapCompose(get_nums),)
    capital = Field(input_processor=MapCompose(str_capital),)

다시 파이프에서 출력해서 결과를 볼 수 있어요.
class ScrpyItemPipeline(object):
    def process_item(self, item, spider):
        print('item name is ::',item['title'])
        print('item content is :',item['population'])
        print('item capital is :',item['capital'])
        return item

실행 결과는 다음과 같습니다.
      
item name is :: country_China
item content is : 1330044000
item capital is : capital_Beijing
        
{'capital': 'capital_Beijing','population': '1330044000', 'title': 'country_China'}

이상은 scrapy에서 데이터를 세척하는 과정으로 대량의 필드에 대해 분석할 때 페이지를 세척할 때보다 훨씬 좋고 코드가 번잡하지 않게 활용할 수 있다.

좋은 웹페이지 즐겨찾기