1. 程式人生 > >python爬蟲提取資訊:正則表示式和xpath

python爬蟲提取資訊:正則表示式和xpath

爬蟲主要是兩個功能,一是訪問網頁,二是從網頁中提取資料。事實上訪問網頁基本都是呼叫介面直接就可以訪問,而從網頁中正確地提取資料是主要工作量所在。

這裡給出兩種提取資料的選擇和用到的相關庫。

先說說兩種方法的特點:

python正則表示式:速度快,一整篇html能夠用一句簡短的正則表示式解決。但是有的html用正則表示式取到的資料會混亂(多個段落符合正則表示式,但是其中有的資料並不是我們想要提取的)。另外,下文推薦的python庫request和re很簡單。

xpath:xpath對xml格式的東西解析比較規範,基本上能做到你想要哪個資料就取哪個資料。但是要對xml格式有精確的瞭解。可以用lxml對xml解析。

scrapy應該還有一些別的爬蟲優勢我不知道的,比如其settings.py檔案中應該可以偽裝瀏覽器資訊等,以後再研究。

下面就給出兩種方法的具體操作用法吧:

1.python正則表示式:正則表示式語法規則參考 http://www.cnblogs.com/fnng/archive/2013/05/20/3089816.html

主要用到的函式是request.get()(請求網站)和re.findall()(正則表示式)

這裡貼出一個小函式

def extractDataOutPutList(RegExp,web):
    content = re.findall(RegExp, web)
    if 
content: content = [re.sub(u'[ \n\r\t\u3000]+', ' ', re.sub(u'<.*?>|\xa0', ' ', unescape(t))).strip() for t in content] return content
 [re.sub(u'[ \n\r\t\u3000]+', ' ', re.sub(u'<.*?>|\xa0', ' ', unescape(t))).strip() for t in content]這個是從大蘇神的網站(http://spaces.ac.cn/category/Big-Data/)上面抄的,是個很不錯的過濾出漢字的條件
RegExp需要填寫正則表示式,例如糗百抓笑話內容可以用 RegExp='<div class="content">([\s\S]*?)</div>',每個網站都不同需要嘗試。。。在下經常是連蒙帶猜寫出來的。。

2.xpath。xpath的話推薦使用scrapy進行爬取。用lxml結合request也能進行xpath解析。

scrapy的爬取執行方式和一般python檔案不同。

這裡也推薦一個寫得很好的部落格 http://www.shareditor.com/blogshow/?blogId=43 

(我懶,就不自己重新總結一遍了。。。就和寫程式一樣,能調介面的絕不自己編)