【问题标题】:scrapy insert into databasescrapy 插入数据库
【发布时间】:2018-11-27 03:22:54
【问题描述】:

我有一个使用scrapy 的工作脚本,它使用管道类将抓取的项目插入数据库。然而,这似乎大大减慢了刮擦速度。我正在使用 process item 方法将每个刮掉的项目插入到数据库中,因为它被刮掉了。将抓取的项目输出到csv文件中,然后使用存储过程将数据插入数据库会更快吗?

def process_item(self, item, spider):

    if 'address_line_1' in item:
        sql = """INSERT dbo.PropertyListings (date, url, ad_type, address_line_1, suburb, state, postcode)
        SELECT ?, ?, ?, ?, ?, ?, ?
        WHERE NOT EXISTS
        (   SELECT 1
            FROM dbo.PropertyListings
            WHERE date = ?
            AND address_line_1 = ?
            AND suburb = ?
            AND state = ?
            And postcode = ?
        )
        """
        self.crsr.execute(sql, item['date'], item['url'], item['ad_type'], item['address_line_1'], item['suburb'], \
            item['state'], item['postcode'], item['date'], item['address_line_1'], item['suburb'], item['state'], \
            item['postcode'])
        self.conn.commit()

    else:
        sql = """INSERT dbo.PropertyListings (date, url, ad_type, address_line_1, suburb, state, postcode)
        SELECT ?, ?, ?, ?, ?, ?, ?
        WHERE NOT EXISTS
        (   SELECT 1
            FROM dbo.PropertyListings
            WHERE date = ?
            AND url = ?
        )
        """

        self.crsr.execute(sql, item['date'], item['url'], item['ad_type'], '', item['suburb'], \
            item['state'], item['postcode'], item['date'], item['url'])
        self.conn.commit()

    return item

【问题讨论】:

    标签: python scrapy database-performance


    【解决方案1】:

    您似乎正在尝试对每个数据点进行插入。这确实很慢!!收集完所有数据后,您应该考虑bulk insertions,或者至少分块插入。

    使用类似的东西

    def scrape_me_good():
        data = []
    
        for something in something_else():
            # Process data
            data.append(process_a_something(something)
    
        bulk_insert(data)
    

    不是这个

    def scrape_bad():
        for something in something_else():
            single_insert(process_a_something(something)
    

    请参阅this answer,了解 SQL Server 中相当不错的性能细分

    【讨论】:

      猜你喜欢
      • 2015-05-27
      • 2020-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多