【问题标题】:How to save one price per row instead of all prices on one row?如何保存每行一个价格而不是一行的所有价格?
【发布时间】:2015-10-08 07:21:33
【问题描述】:

我将每个产品的所有价格 (price['value']) 保存在一行中,以逗号分隔。为了将每个价格保存在前一个价格下方的行中,我需要进行哪些调整?

import mechanize
from lxml import html
import csv
import io
from time import sleep

def save_products (products, writer):

    for product in products:

        writer.writerow([ product["title"][0].encode('utf-8') ])
        for price in product['prices']:
            writer.writerow([x.encode('utf-8') for x in price['value']])


f_out = open('pcdResult.csv', 'wb')
writer = csv.writer(f_out)

links = ["http://purechemsdirect.com/ourprices.html/" ]

br = mechanize.Browser()
br.set_handle_robots(False)
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]

for link in links:

    print(link)
    r = br.open(link)

    content = r.read()

    products = []        
    tree = html.fromstring(content)        
    product_nodes = tree.xpath('//div[@class="col-md-6 col-lg-6 col-sm-12"]')

    for product_node in product_nodes:

        product = {}
        try:
            product['title'] = product_node.xpath('.//p/strong/text()')

        except:
            product['title'] = ""

        price_nodes = product_node.xpath('.//ul')

        product['prices'] = []
        for price_node in price_nodes:

            price = {}
            try:
                price['value'] = price_node.xpath('.//li/text()')

            except:
                price['value'] = ""

            product['prices'].append(price)
        products.append(product)
    save_products(products, writer)

f_out.close() 

【问题讨论】:

  • 显示你当前的输出和你想要的输出。
  • 5 for ┬ú8.00,10 for ┬ú12.00,25 for ┬ú20.00,50 for ┬ú45.00,100 for ┬ú50.00,250 for ┬ú150.00,500 for ┬ú250.00 ,"1,000 for ┬ú425.00","2,500 for ┬ú850.00","5,000 for ┬ú1,400.00","10,000 for ┬ú2,450.00","25,000 for ┬ú4,900.00"
  • 现在保存在一个单元格中,但是每个逗号所在的位置都应该分隔到一个新单元格中,存储在最后价格下方的行中。
  • 您可以编辑您的问题并添加格式正确的所需输出。

标签: python csv web-scraping


【解决方案1】:

尝试在你的函数中使用这一行: writer.writerow([x.encode('utf-8') for x in price['value']]) 并将其变成:

     for x in price['value']:
         writer.writerow(x)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-17
    • 1970-01-01
    • 2020-02-01
    • 2022-07-07
    • 1970-01-01
    • 2015-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多