因為工作需求,需要審核一部分query內容是否有效,query儲存在Excel中,文本內容為頁面的Title,而頁面的URL以HyperLink的格式關聯到每個Cell。
于是本能的想到用Python讀取Excel文件之后進行文本分析,之后對每個鏈接進行一次HttpRequest,通過分析HttpResponse的內容來判斷當前鏈接是否有效。
于是上網搜了下,發現比較主流的是用xlrd的插件,但是實際使用過程中發現,無論如何,最終獲取的hyperlink_map值一直都是None,也沒空去分析到底是為什么。最后經過搜索發現一個叫xlwings的Python庫,可以有效使用。
具體的代碼如下:
# -*- coding=utf-8 -*-import xlwings as xwimport urllibimport systype = sys.getfilesystemencoding() def get_html(url): page = urllib.urlopen(url) html = page.read() return unzip(html)## Debug的時候發現無論怎樣做Decode,最后的結果都是亂碼## 后來發現是因為對應的網頁做了壓縮處理,所以需要對獲取的網頁內容手動解壓縮def unzip(data): import gzip import StringIO data = StringIO.StringIO(data) gz = gzip.GzipFile(fileobj=data) data = gz.read() gz.close() return datawb = xw.Book(r"C:/Users/hasee/Desktop/Test.xlsx")main_data = wb.sheets["Sheet2"]## 通過獲取Last Cell來確定當前Sheet的有效行數與列數rownum = main_data.range('A1').current_region.last_cell.rowcolnum = main_data.range('A1').current_region.last_cell.column## 定位column對應的列col_dict = {"2":"B","3":"C","4":"D","5":"E","6":"F"}for row in range(1, rownum + 1): for col in range(2, colnum + 1): query = main_data.range(row, 1).value cell = main_data.range(row, col) link = cell.hyperlink html = get_html(link) if "error-container" in html: print "%s,%s,%s,%s" % (query, col_dict.get(str(col))+str(row), cell.value, cell.hyperlink) ## 對無效的鏈接所屬的Cell染色,直接寫入文件 cell.color = (253,218,4)以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。
新聞熱點
疑難解答