<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        Python爬蟲初學之爬取段子

        來源:懂視網 責編:小采 時間:2020-11-27 14:14:20
        文檔

        Python爬蟲初學之爬取段子

        Python爬蟲初學之爬取段子:最近開始學Python的爬蟲,是在這個博客跟著學習的,該博主用的是Python 2.7版本,而我使用的是3.5版本,很多不兼容的地方,不過沒關系,自己改改就好了。我們想針對網站的內容進行篩選,只獲取自己感興趣的部分。比如你想在XX網站把小黃圖篩選出來,打包帶走
        推薦度:
        導讀Python爬蟲初學之爬取段子:最近開始學Python的爬蟲,是在這個博客跟著學習的,該博主用的是Python 2.7版本,而我使用的是3.5版本,很多不兼容的地方,不過沒關系,自己改改就好了。我們想針對網站的內容進行篩選,只獲取自己感興趣的部分。比如你想在XX網站把小黃圖篩選出來,打包帶走

        我們想針對網站的內容進行篩選,只獲取自己感興趣的部分。比如你想在XX網站把小黃圖篩選出來,打包帶走。這里只做簡單的實現,以百思不得姐上的段子(純文本)為例。我們想要實現如下功能:

      1. 批量下載若干頁段子到本地文件中

      2. 按下任意一鍵,開始閱讀下一條段子

      3. 1. 獲取網頁代碼

        導入urllib的相關庫,Python 3中應該這樣寫:

        import urllib.requestimport urllib.parseimport re

        re庫是正則表達式(Regular Expression),后面作匹配時會用到。

        百思不得姐的段子頁面url ='http://www.budejie.com/text/1',這里末尾數字1代表此為第一頁。通過以下代碼就能返回網頁內容。

         req = urllib.request.Request(url)# 添加headers 使之看起來像瀏覽器在訪問req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 ' '(KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36')
         response = urllib.request.urlopen(req)# 得到網頁內容,注意必須使用decode()解碼html = response.read().decode('utf-8')

        print(html)的話,就是如下所示的內容:

        這能看?段子呢?我們想要的段子呢?!

        哦對了headers這樣查看。

        按F12,然后...看圖吧

        2. 正則匹配提取段子

        要想篩選符合普通人閱讀的內容(如果還帶著html標簽那還咋讀是不),成功提取出段子,為此我們需要一些既定的模式去和網頁全部內容進行匹配,將模式下匹配成功的對象返回。我們使用強大的正則表達式進行匹配(Regular Expression),相關語法可以看這里。

        僅僅針對本例中的網頁內容,先看看我們需要的段子對應了網頁中的什么內容。

        可以看到段子被<div class="j-r-list-c-desc">(我們要的內容)</div>這樣的標簽所包圍,只需要指定相應規則提取出來即可!上圖可以看出段子正文前后是有很多空格的,需要匹配進去。

        pattern = re.compile(r'<div class="j-r-list-c-desc">s+(.*)s+</div>')
        result = re.findall(pattern, html)

        通過re庫的compile函數制定規則。

      4. s+可以匹配一個或更多的空格

      5. .匹配除開換行符 外的所有字符。

      6. 現在我們得到了匹配后的結果,來看下。

        Bingo!提取出來了不是?!

        可是我們發現里面還有些討厭的<br />。沒關系,寫幾行代碼的事。這里就不再展示去掉后的內容,自行腦補哈哈。

         for each in content:# 如果某個段子里有<br />if '<br />' in each:# 替換成換行符并
        輸出new_each = re.sub(r'<br />', ' ', each)print(new_each)# 沒有就照常輸出else:print(each)

        這里content是我們通過re.findall()返回的列表。

        至此,我們成功得到我們想看的段子了!如果想要下載到本地呢?

        3. 下載段子到本地

        通過定義一個save()函數即可,num參數用戶自定,想下載最近100頁的內容都沒問題!里面還有些變量沒有提到,最后會給出源代碼。

        # num是指定網頁頁數def save(num):# 寫方式打開一個文本,把獲取的段子列表存放進去with open('a.txt', 'w', encoding='utf-8') as f:
         text = get_content(num)# 和上面去掉<br />類似for each in text:if '<br />' in each:
         new_each = re.sub(r'<br />', '
        ', each)
         f.write(new_each)else:
         f.write(str(each) + '
        ')

        下載到本地文檔后如下圖所示

        4. 逐條讀取段子

        段子太多,琳瑯滿目。可我們只希望一條條閱讀。通過按下鍵盤任意鍵可以切換到下一條,直到讀取到最后一條程序才結束,或者通過設置一個退出鍵隨時退出程序,比如設定q鍵退出。這里把全部代碼給出。

        import urllib.requestimport urllib.parseimport re
        
        pattern = re.compile(r'<div class="j-r-list-c-desc">s+(.*)s+</div>')# 返回指定網頁的內容def open_url(url):
         req = urllib.request.Request(url)
         req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 ' '(KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36')
         response = urllib.request.urlopen(req)
         html = response.read().decode('utf-8')return html# num為用戶自定,返回的是所有頁的段子列表def get_content(num):# 存放段子的列表text_list = []for page in range(1, int(num)):
         address = 'http://www.budejie.com/text/' + str(page)
         html = open_url(address)
         result = re.findall(pattern, html)# 每一頁的result都是一個列表,將里面的內容加入到text_listfor each in result:
         text_list.append(each)return text_list# num是指定網頁頁數def save(num):# 寫方式打開一個文本,把獲取的段子列表存放進去with open('a.txt', 'w', encoding='utf-8') as f:
         text = get_content(num)# 和上面去掉<br />類似for each in text:if '<br />' in each:
         new_each = re.sub(r'<br />', '
        ', each)
         f.write(new_each)else:
         f.write(str(each) + '
        ') 
         
        if __name__ == '__main__':print('閱讀過程中按q隨時退出')
         number = int(input('想讀幾頁的內容: '))
         content = get_content(number + 1)for each in content:if '<br />' in each:
         new_each = re.sub(r'<br />', '
        ', each)print(new_each)else:print(each)# 用戶輸入user_input = input()# 不區分大小寫的q,輸入則退出if user_input == 'q' or user_input == 'Q':break

        演示一下,效果是這樣的。

        雖然功能很雞肋,不過作為初學我還是很滿意了,有興趣才能深入下去嘛!爬蟲可不僅僅如此而已,以后會學習更加高級的功能。


        by @sunhaiyu

        2016.8.15

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        Python爬蟲初學之爬取段子

        Python爬蟲初學之爬取段子:最近開始學Python的爬蟲,是在這個博客跟著學習的,該博主用的是Python 2.7版本,而我使用的是3.5版本,很多不兼容的地方,不過沒關系,自己改改就好了。我們想針對網站的內容進行篩選,只獲取自己感興趣的部分。比如你想在XX網站把小黃圖篩選出來,打包帶走
        推薦度:
        標簽: 學習 段子 入門
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 国产线视频精品免费观看视频| 国产成人精品123区免费视频| 成人免费看黄20分钟| 亚洲另类激情综合偷自拍| 特级av毛片免费观看| 黄页网站在线看免费| 亚洲AV成人一区二区三区AV| 亚洲乱码一二三四区国产| 亚洲s码欧洲m码吹潮| 麻豆成人精品国产免费| 国产亚洲?V无码?V男人的天堂 | 在线观看的免费网站无遮挡| 亚洲中久无码永久在线观看同| eeuss影院免费直达入口| 久久久久国产成人精品亚洲午夜 | 亚洲精品无码激情AV| 成年大片免费视频播放一级| 亚洲一级毛片免费在线观看| 亚洲精品成人片在线观看| 一区视频免费观看| 啦啦啦手机完整免费高清观看| 久久精品国产96精品亚洲| 精品熟女少妇a∨免费久久| 亚洲无成人网77777| 日本免费人成网ww555在线| 亚洲自偷自拍另类12p| 精品国产呦系列在线观看免费| 亚洲人成人77777网站| 免费看又黄又爽又猛的视频软件| 4444www免费看| 在线a亚洲老鸭窝天堂av高清| 精品久久洲久久久久护士免费| 日本一区二区三区免费高清在线| 亚洲成av人在片观看| 国产精品99久久免费观看 | ASS亚洲熟妇毛茸茸PICS| 日日AV拍夜夜添久久免费| 亚洲成年人免费网站| 国产在线观看免费不卡| 中文字幕免费在线看线人动作大片 | 亚洲精品无码不卡在线播HE|