Python3.4簡單爬蟲實現之抓取糗事百科段子

網上的python教程大都是2.X版本的,python2.X和python3.X相比較改動比較大,好多庫的用法不太一樣,我安裝的是3.4.1,就用3.4.1實現一下網頁內容抓取


首先是庫,2.7版本的urllib2庫已經沒有了,我導入的是:

import urllib.request
import re


首先是取得url,直接打開糗事百科直接複製網址

url='http://www.qiushibaike.com/hot/'


然後設置headers,僞裝成瀏覽器進行訪問,有的網站會有屏蔽措施,設置過headers可以繞過屏蔽

user_agent='Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers={'User-Agent':user_agent}


然後進行請求,這裏3.4和2.7有點不一樣,注意用法

request=urllib.request.Request(url=url,headers=headers)


然後獲取響應結果,注意用法

response=urllib.request.urlopen(request)


此時就抓去了整個網頁源代碼,可以打印一下看看

content=response.read().decode('utf-8')

print(content)


如何抓取想要的內容呢?這裏需要正則表達式去匹配

先看看部分源碼的內容,如下:

<div class="article block untagged mb15" id='qiushi_tag_115326209'><div class="author clearfix"><a href="/users/6689931" target="_blank" rel="nofollow"><img src="http://pic.qiushibaike.com/system/avtnew/668/6689931/medium/20140301102643.jpg" alt="狼牙蠍子尾"/></a><a href="/users/6689931" target="_blank" title="狼牙蠍子尾"><h2>狼牙蠍子尾</h2></a></div><div class="content">“懶惰是可以戰勝飢餓的 ”<br/><br/>“但卻輸給了尿”<!--1456774385--></div><div class="thumb"><a href="/article/115326209" target="_blank"><img src="http://pic.qiushibaike.com/system/pictures/11532/115326209/medium/app115326209.jpg" alt="懶惰是可以戰勝飢餓的 " /></a></div><div class="stats"><span class="stats-vote"><i class="number">1702</i> 好笑</span><span class="stats-comments"><span class="dash"> · </span><a href="/article/115326209" data-share="/article/115326209" id="c-115326209" class="qiushi_comments" target="_blank"><i class="number">26</i> 評論


這是一條內容,可以看出,從<div ....author...開始到</i>結束

然後就寫正則匹配

pattern=re.compile('<div.*?author clearfix">.*?<h2>(.*?)</h2>.*?<div.*?content">(.*?)<!--.*?-->.*?<img src="(.*?)" alt=.*?>.*?</i>')


再然後就可以獲取內容了

items=re.findall(pattern,str(content))


由於控制檯不能輸出圖片,就把帶圖片的過濾掉吧

for item in items:
 haveImg=re.search('img',item[2])
 if not haveImg:
  print(item[0]),print(item[1])


然後運行即可


附上源碼圖片以及運行結果:





代碼估計大家都能看懂,正則表達式可能新手不太理解


我稍微說一下

.*?代表一個固定搭配,指儘可能短的匹配

(.*?)代表一個分組,是我們抓取的內容

re.S說明可以匹配到換行,如果沒有re.S就啥也取不到



這個代碼是初稿,比較粗糙,有興趣的可以把它改造成面向對象的模式




此處有貼出糗事百科用戶id名稱,非惡意,望見諒






發佈了44 篇原創文章 · 獲贊 17 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章