国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python爬蟲爬取糗事百科熱文

2019-11-08 19:53:19
字體:
來源:轉載
供稿:網友

1. 概述

本篇文章中將分享使用Python爬蟲爬取糗事百科熱門笑話(注:其中不包含任何針對糗事百科的惡意攻擊和其它商業行為),爬取的主要步驟是:1. 模擬瀏覽器抓取糗事百科的網頁;2. 對網頁內容使用正則表達式解析,得到想要的內容;3. 再將這些內容分類保存和整理。在書寫匹配的正則表達式時可以使用Chrome瀏覽器的F12鍵對元素進行快速定位,這對表達式提供了方便。

2. 實現

# -*- coding=utf-8 -*-import urllib as url_libimport urllib2 as url_lib2import bs4 as BS4import reimport osimport sysreload(sys)sys.setdefaultencoding('utf8')class get_joke(object):    def __init__(self, url_str):        self.url_str = url_str  # 糗事百科笑話鏈接的初始化鏈接        self.page_href = set()  # 糗事百科其他頁的鏈接        self.next_page = ""     # 下一頁的鏈接        # 糗事百科對爬蟲訪問進行了阻止,這里采用偽裝的形式進行訪問        self.user_agent = 'Mozilla/5.0 (X11; linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.89 Safari/537.36'        self.headers = {"User-Agent": self.user_agent}    # 讀取網頁數據    def getwebpage(self, url_str = ""):        if "" is self.url_str:            if "" == url_str:                return None            else:                self.url_str = url_str        try:            request = url_lib2.Request(self.url_str, headers = self.headers)            webpage = url_lib2.urlopen(request).read().decode('utf-8')        except url_lib2.URLError as ex:            if hasattr(ex, "code"):                PRint(ex.code)            if hasattr(ex, "reason"):                print(ex.reason)        webpage = webpage.decode("utf-8")        return webpage    # 讀取糗事百科上面的文本笑話,包括文本笑話的作者,內容,點贊數目,評論數目    def getjoke_text(self, webpage):        if None is webpage:            return None        re_str = '<div.*?>.*?<div class="author.*?>.*?<img.*?alt="(.*?)"/>.*?<div class="content">		.*?<span>(.*?)</span>.*?<div class="stats">.*?<i class="number">(.*?)</i>.*?<span class="dash">		.*?<i class="number">(.*?)</i>.*?</div>'        re_obj = re.compile(re_str, re.S)   # re.S 標志代表在匹配時為點任意匹配模式,點 . 也可以代表換行符        jokes = re.findall(re_obj, webpage)        print("獲取到的笑話的個數:%d" % len(jokes))        joke_list = []        for joke in jokes:            temp_str = "%s" % joke[1]            temp_str = re.sub("(<br/>)", " ", temp_str)            print("發表者:%s"%joke[0] + "/n內容:%s"%temp_str + "/n點贊數目:%s"%joke[2] + "/n評論數目:%s/n"%joke[3])            joke_list.append([joke[0], joke[1], joke[2], joke[3]])        return joke_list    # 尋找網頁上的下一頁跳轉鏈接    def getnext_page(self, webpage):        if None is webpage:            return None        print('爬蟲開始獲得下一頁的鏈接。。。')        re_str = '<li>.*?<a href="(.*?/page/.*?)".*?>.*?<!--<.*?>-->.*?<span class="next">.*?</span>.*?</a>.*?</li>'        re_obj = re.compile(re_str, re.S)        next_href = re.findall(re_obj, webpage)        print("下一頁鏈接的個數:%d" % len(next_href))        if len(next_href) > 0:            nexthref = self.get_absoluteurl(next_href[0][6:])            print("得到的下一頁的鏈接為:%s" % nexthref)            return nexthref    # 獲取網頁的絕對路徑    def get_absoluteurl(self, url_str):        if url_str.startswith("http://"):            return url_str        if url_str.startswith("http://www."):            url_str = "http://" + url_str[11:]            return url_str        if url_str.startswith("www."):            url_str = "http://" + url_str[4:]            return url_str        else:            url_str = self.url_str + "/" + url_str            return url_str        if self.url_str not in url_str:  # 去除盜鏈            return None        return None    def write2file(self, list):        if None is list:            return None        else:            dir_str = os.path.abspath('.')            dir_str += "/jokes/"            print("文件保存路徑:%s" % dir_str)            if not os.path.exists(dir_str):                os.makedirs(dir_str)            dir_str += "joke.txt"            try:                my_file = open(dir_str, 'w')                for item in list:                    my_file.writelines(item[0]+"/t" + item[1]+"/t" + item[2]+"/t" + item[3]+"/t/n")            except IOError,ex:                my_file.close()                print ex                return None            finally:                my_file.close()# 主函數部分url_str = "http://www.qiushibaike.com/text"print("需要采集的網頁為:" + url_str)my_obj = get_joke(url_str)webpage = my_obj.getwebpage()my_obj.getnext_page(webpage)joke_list = my_obj.getjoke_text(webpage)my_obj.write2file(joke_list)

3. 結果


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 左贡县| 崇州市| 安宁市| 揭阳市| 吴江市| 东乌珠穆沁旗| 墨竹工卡县| 车险| 盐池县| 清徐县| 昭通市| 崇阳县| 南华县| 雅安市| 原平市| 鄯善县| 永胜县| 宜良县| 拉孜县| 明光市| 巴林右旗| 林口县| 济源市| 南郑县| 广灵县| 宝清县| 秭归县| 仙桃市| 望谟县| 繁峙县| 文安县| 天台县| 红河县| 兰坪| 永新县| 杭锦后旗| 婺源县| 六枝特区| 武陟县| 合水县| 四子王旗|