最近遇到的问题记录20190319

这几天帮朋友写一个爬虫程序,获取产品类目信息,过程中发现几个问题记录下来

输出

写入CSV

开始直接用逗号拼接直接保存文本文件,后来发现数据中包含逗号,
这种输出方式会导致错误(有些数据分隔到了下一列)
写入csv文件,且能处理数据包含逗号的情况,可以考虑csv
这样输出的文件用excel打开后可以正确显示

代码如下:
#!/usr/bin/python3
import csv

def output_csv(datas):
    """
    将爬取的数据导出到csv
    :return:
    """
    # categories , description,url
    with open('test.csv', 'w') as csvfile:
        file = csv.writer(csvfile)
        # 写入首行
        file.writerow(['Sequence', 'Product Categories', 'Product SubCategories', 'Description', 'URL'])
        for i in range(len(datas)):
            key = datas[i]
            sequence = i + 1
            categories = key['categories']
            subcategories = key['subcategories']
            description = key['description']
            url = key['url']
            file.writerow([sequence, categories, subcategories, description, url])


# 构造测试数据列表,每条数据包含 类目,子类目,描述,url
categories_data = [{"categories": "test category A/B",
                    "subcategories": "",
                    "description": "Eco Foam Playing Puzzle, Mat in Geometry Shape 1",
                    "url": "https://www.baidu.com"},
                    {"categories": "test category A/B",
                    "subcategories": "",
                    "description": "Eco Foam Playing Puzzle Mat in Geometry Shape 2",
                    "url": "https://www.baidu.com"},
                   {"categories": "Eva Printing Mat",
                    "subcategories": "",
                    "description": '12"*12" New Design Triangle EVA Foam, Puzzle Interlocking Kids Mat',
                    "url": "https://www.baidu.com"
                    }]

output_csv(categories_data)

写入Excel

写入excel可以使用pythonxlwt

excel里写入超链接

输出超链接的格式为:link = 'HYPERLINK("%s","%s")' % (url, [display word])

其中第一个参数是链接地址,第二个参数是显示文字

xlwt输出超链接的代码:sheet.write(row, col, xlwt.Formula(link))

不只是超链接可以这样输出,Excel公式也可以用这种方式输出

输出超链接的两个问题

  1. sheet名不能包含特殊字符,注意对数据进行校验

    如果必须按某个字段分割sheet,可以考虑在首页按此字段做链接,
    每个sheet页名称用自增序列命名,
    这样,在首页进行路由,跳转到不同sheet页面,
    其它sheet页面首行可增加一个返回链接

  2. 超链接中包含"时需要特殊处理

    查找了好多博客和论坛,有说Excel里两个双引号代表一个双引号,
    也有说三个或四个代表一个双引号,
    经测试处理方法为: str.replace('"', '""')
    在Linux上好像不管几个引号都不行,还没找到问题所在

代码如下:
import xlwt

def output_excel(datas):
    wbk = xlwt.Workbook(encoding='utf-8')
    for data in datas:
        # 对 sheet 页名称数据需要校验处理
        sheet_name = data['category'].replace('/', '')
        sheet = wbk.add_sheet(sheet_name)
        # 写入当前 sheet 页表头
        sheet.write(0, 0, 'Sequence')
        sheet.write(0, 1, 'Product SubCategories')
        sheet.write(0, 2, 'Description')
        row = 1  # 数据从第二行开始写入
        for product in data['products']:
            sheet.write(row, 0, row)  # 序列号,和行号相同
            sheet.write(row, 1, product['subcategories'])
            link = 'HYPERLINK("%s","%s")\n' % (product['url'], product['description'].replace('"', '""'))
            sheet.write(row, 2, xlwt.Formula(link))
            row += 1
    wbk.save('test.xls')


# 构造测试数据,多个类目,每个类目有多种产品,每个产品有若干属性
categories_data = {"category": "test category A/B",
                    "products": [{"subcategories": "",
                                "description": "Eco Foam Playing Puzzle Mat in Geometry Shape 1",
                                "url": "https://www.baidu.com"},
                                {"subcategories": "",
                                "description": "Eco Foam Playing Puzzle Mat in Geometry Shape 2",
                                "url": "https://www.baidu.com"}]
                   }, {
                    "category": "Eva Printing Mat",
                    "products": [{
                                "subcategories": "",
                                "description": '12"*12" New Design Triangle EVA Foam Puzzle Interlocking Kids Mat',
                                "url": "https://www.baidu.com"
                                }]
                    }

output_excel(categories_data)

UI界面显示

这里我使用了·pythontkinter 模块,

遇到的问题主要有
1. 控件间交互
2. 多线程并发
3. 界面与代码解耦

目前代码都写在一起,时间有限(只有周末),暂时先完成功能,
后面有时间再完善

tkinter实战一段时间后再发博客

程序打包

程序打包使用 pyinstaller
运行命令如下:

# 下载
pip install pyinstaller
# 打包
cd <dir:程序所在目录>
pyinstaller F -w -i=icon.ico Main.py
pyinstaller 命令参数说明

-F 表示生成单个可执行文件
-w 表示去掉控制台窗口,这在GUI界面时非常有用。不过如果是命令行程序的话那就把这个选项删除吧!
-p 表示你自己自定义需要加载的类路径,一般情况下用不到
-i 表示可执行文件的图标

pyinstaller 打包时的一些问题记录
包含第三方库的打包注意事项:

将第三方库复制到程序同目录中,再进行打包

无法定位程序输入点ucrtbase.terminate于动态链接库api-ms-win-crt-runtime-|1-1-0.dll 上。

给同学的程序报这个错,网上搜到很多解决办法,可参考以下链接:
https://blog.youkuaiyun.com/liweisnake/article/details/53055093
http://tieba.baidu.com/p/3848709732

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值