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

目的:獲取糗事百科段子
1
思路:

1、爬取網頁

2、然後根據正則爬取出 關鍵內容

3、根據關鍵內容 再用正則匹配出 對應的用戶名和內容

4、循環賦值進行輸出


源碼:

import urllib.request
import re

def getcontent(url, page):
    headers = ("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36")
    opener = urllib.request.build_opener()
    opener.addheaders = [headers]
    # 將opener安裝爲全局
    urllib.request.install_opener(opener)
    data = urllib.request.urlopen(url).read().decode("utf-8")
    # 構建對應用戶提取的正則表達式
    userpat = '<h2>(.*?)</h2>\n[</a>\n<div class="articleGender|</span>\n<!-- <div class="articleGender]'  # 存在匿名用戶  所有需要兩種條件
     # 構建對應段子內容提取的正則表達式
    contentpat = '<div class="content">\n<span>(.*?)\n</span>'
    # 找出所有用戶
    # re.S 將“\n”當做一個普通的字符加入到這個字符串中,在整體中進行匹配
    userlist = re.compile(userpat, re.S).findall(data) 
    # 找出所有內容
    contentlist = re.compile(contentpat, re.S).findall(data)
    x = 1
    # 通過for循環遍歷段子內容並將內容分別賦給對應的變量
    for content in contentlist:
        content = content.replace("\n", "")
        # 用字符串作爲變量名,現將對應字符串賦給一個變量
        name = "content"+str(x)
        # 通過exec()函數實現用字符串作爲變量名並賦值
        exec(name+'=content')
        x += 1
    y = 1
    # 通過for循環遍歷用戶,並輸出該用戶對應的內容
    for user in userlist:
        user = user.replace("\n", "")
        name = "content"+str(y)
        print("用戶 " + str(page)+str(y)+" 是: " + user)
        print("內容是: ")
        exec("print( " + name + ")")
        print("\n")
        y += 1

# 分別獲取各項各頁的段子,通過for循環可以獲取多頁
for i in range(1, 3):
    url = "https://www.qiushibaike.com/8hr/page/"+str(i)
    getcontent(url, i)

結果:
這裏寫圖片描述

注意:如果糗事百科網頁代碼結構發生變化那麼上述代碼中的URL以及網址的正則表達式也是需要改變的。
如有疑問可以留言 看到都會回覆的說~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章