標籤:
1.本文的目的是練習Web爬蟲
目標:
1.爬去糗事百科熱門段子2.去除帶圖片的段子3.擷取段子的發布時間,發布人,段子內容,點贊數。
2.首先我們確定URL為http://www.qiushibaike.com/hot/page/10(可以隨便自行選擇),先構造看看能否成功
構造代碼:
1 # -*- coding:utf-8 -*- 2 import urllib 3 import urllib2 4 import re 5 6 page = 10 7 url = ‘http://www.qiushibaike.com/hot/page/‘ + str(page) 8 user_agent = ‘Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)‘ 9 headers = { ‘User-Agent‘ : user_agent }10 try:11 request = urllib2.Request(url,headers = headers)12 response = urllib2.urlopen(request)13 content = response.read()14 print content15 except urllib2.URLError, e:16 if hasattr(e,"code"):17 print e.code18 if hasattr(e,"reason"):19 print e.reason
View Code
成功構造,但是有亂碼情況,不用擔心,我們只需將:
content = response.read()替換為content = response.read().decode(‘UTF-8‘)
3.提取段子前,我們必須,必須分析頁面構造
4.好了看看頁面的構造,我們可以寫正則來匹配,代碼入如下:
pattern = re.compile(‘<div.*?class="author.*?>.*?<a.*?</a>.*?<a.*?>(.*?)</a>.*?<div.*?class‘+‘="content".*?>(.*?)</div>(.*?)<div class="stats.*?class="number">(.*?)</i>‘,re.S) items = re.findall(pattern,content) for item in items: haveImg = re.search("img",item[2]) if not haveImg: print item[0],item[1],item[2],item[3]
其中:
(1) .*? 是一個固定的搭配,.和*代表可以匹配任意無限多個字元,加上?表示使用非貪婪模式進行匹配,也就是我們會儘可能短地做匹配,以後我們還會大量用到 .*? 的搭配
(2) (.*?)代表一個分組,在這個Regex中我們匹配了五個分組,在後面的遍曆item中,item[0]就代表第一個(.*?)所指代的內容,item[1]就代表第二個(.*?)所指代的內容,以此類推
(3) re.S 標誌代表在匹配時為點任意匹配模式,點 . 也可以代表分行符號
(4) img 是去除匹配的圖片標籤
通過以上的實驗,得到最終的實驗代碼:
1 # -*- coding:utf-8 -*- 2 import urllib 3 import urllib2 4 import re 5 6 page = 10 7 url = ‘http://www.qiushibaike.com/hot/page/‘ + str(page) 8 user_agent = ‘Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)‘ 9 headers = { ‘User-Agent‘ : user_agent }10 try:11 request = urllib2.Request(url,headers = headers)12 response = urllib2.urlopen(request)13 content = response.read().decode(‘utf-8‘)14 pattern = re.compile(‘<div.*?class="author.*?>.*?<a.*?</a>.*?<a.*?>(.*?)</a>.*?<div.*?class‘+‘="content".*?>(.*?)</div>(.*?)<div class="stats.*?class="number">(.*?)</i>‘,re.S)15 items = re.findall(pattern,content)16 for item in items:17 haveImg = re.search("img",item[2])18 if not haveImg:19 print item[0],item[1],item[2],item[3]20 except urllib2.URLError, e:21 if hasattr(e,"code"):22 print e.code23 if hasattr(e,"reason"):24 print e.reason
View Code
參考:http://cuiqingcai.com/990.html
Python爬蟲實戰-爬取糗事百科段子