最近遇到的問題記錄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.csdn.net/liweisnake/article/details/53055093
http://tieba.baidu.com/p/3848709732

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章