1. 程式人生 > >Python網路爬蟲中的網頁中文正則表示式匹配小心得

Python網路爬蟲中的網頁中文正則表示式匹配小心得

這是第一篇部落格,關於在正則表示式的情況下通過python的re模組對爬蟲爬下的網頁資料進行正則表示式,匹配得出所有中文字元

#!/usr/bin/python
# -*- coding: utf-8 -*-

import re


def matchURL_info():

    # 對儲存在data_based的資料進行篩選

    try:
        qp = open('data_base.txt', 'rb')  # 開啟data_base.txt進行匹配
    except:
        print 'open data_base failed'
        return 0
    wp = open('result_final.txt', 'wb')
    ep = open('result_final_1.txt', 'wb')  # 測試新的正則表示式
    # 預編譯敏感詞的正則表示式 u"([\u4e00-\u9fa5]+)"
    pattern = re.compile(u'[\u4e00-\u9fa5]+')
    pattern_1 = re.compile(u'[\u4e00-\u9fa5\u3040-\u309f\u30a0-\u30ff]+')
    while 1:
        s = qp.read()
        if not s:
            break
        temp = s.decode('utf8')
        result_info = pattern.findall(temp)

        result_info_1 = pattern_1.findall(temp)

        for r in result_info:
            r_1 = r.encode('utf8')
            wp.write('%s\r\n' % r_1)  # 往op中寫入新檔案
            print r_1
        for i in result_info_1:
            i_1 = i.encode('utf8')
            ep.write('%s\r\n' % i_1)  # 往ep中寫入新的資料
            print i_1
        print 'i have been here'
    qp.close()
    wp.close()
    ep.close()
    return 1


if __name__ = "__main__":
    matchURL_info()


本人通過在爬蟲在本地生成一個data_base.txt文件,儲存爬蟲爬下的所有網頁資料

然後通過這段程式碼開啟這個檔案

pattern與pattern_1是我為了測試不同正則表示式所設定的

大家使用時候可以去除其中一個

在測試時曾遇到過各種錯誤

包括NameError: global name 'decode' is not defined等錯誤,python文字中的格式是utf-8,而網頁中的是unicode

所有第一步一定要將data_base.txt中的文字以二進位制的形式讀出

然後通過decode('utf8')將檔案解碼成unicode,此時開始正則表示式

匹配完之後通過encode('utf8')將資料編碼成為utf-8的格式,寫入本地的另一個檔案之中

這就是最近的大概感想吧,謝謝收看