Python爬蟲實戰-爬取糗事百科段子

來源:互聯網
上載者:User

標籤:

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爬蟲實戰-爬取糗事百科段子

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.