日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

爬虫实战:嗅事百科段子多页爬取

發布時間:2024/9/30 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 爬虫实战:嗅事百科段子多页爬取 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

假如我們想爬取糗事百科( http://ww qiushibaike.com/)上的段子,也可以編寫對應的Python網絡爬蟲實現。

本項目糗事百科網絡爬蟲的實現思路及步驟如下:

  • 分析各頁間的網址規律,構造網址變量,并可以通過for循環實現多頁內容的爬取
  • 構建一個自定義函數,專門用來實現爬取某個網頁上的段子,包括兩部分內容,一部分是對應用戶,一部分是用戶發表的段子內容。該函數功能實現的過程為:首先,模擬成瀏覽器訪問,觀察對應網頁源代碼中的內容,將用戶信息部分與段子內容部分的格式寫成正則表達式。隨后,根據各正則表達式分別提取出該頁中所有的用戶與所有的內容,然后通過for循環遍歷段子內容并將內容分別賦給對應的變量,這里變量名是有規律的,格式為“content+順序號”,接下來再通過for循環遍歷對應用戶,并輸出該用戶對應的內容。
  • 通過for循環分別獲取多頁的各頁URL鏈接,每頁分別調用一次getcontent ( url,page)函數。
  • 定義正則表達式

    用戶
    審查元素

    查看源代碼

    多審查幾個用戶,

    于是我們可以定義規則

    userpat=str('<h2>(.*?)</h2>')

    內容

    于是可以定義內容正則

    contentpat = '<div class="content">(.*?)</div>'

    全部代碼

    import urllib.request import re from urllib import request def getcontent(url,page):headers = ("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3947.100 Safari/537.36")opener = urllib.request.build_opener()opener.addheaders = [headers]# 將opener安裝為全局urllib.request.install_opener(opener)url_request = request.Request(url)html1 = request.urlopen(url_request, timeout=10)data=html1.read().decode('utf-8')#構建用戶正則表達式userpat=str('<h2>(.*?)</h2>')#構建內容正則表達式contentpat = '<div class="content">(.*?)</div>'#尋找出所有用戶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(name+'=content')x+=1y=1#通過for循環遍歷用戶,并始終輸出 該用戶對應的內容for user in userlist:name='content'+str(y)print('用戶'+str(page)+str(y)+'是:'+user)print('內容是:')exec("print("+name+")")print('\n')y+=1for i in range(10):url='https://www.qiushibaike.com/text/page/'+str(i)+'/'getcontent(url,i)

    函數解析

    exec()是一個十分有趣且使用的內置函數,不同于eval()函數只能執行計算數學表達式的結果的功能,exec()能夠動態地執行復雜的Python代碼,能夠十分強大
    首先是一個簡單的小例子,代碼如下:

    i = 12 j = 13 exec("answer=i*j") print("Answer is %s"%answer)

    答案·156

    總結

    以上是生活随笔為你收集整理的爬虫实战:嗅事百科段子多页爬取的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。