1. 程式人生 > >Python爬取多頁糗事百科

Python爬取多頁糗事百科

這次帶來的是如何爬取糗事百科 且 寫入txt文件

大家都知道,糗事百科可以帶給大家很多快樂。
在這裡,我們將實現對其內容的爬取,將這些好笑的段子記錄下來,可以讓我們打發無聊或沒網時的時間。

當爬取我們想要的內容時,幾乎都離不開這幾個步驟:
1、網站地址;
2、獲取其原始碼;
3、匹配想要的內容

一、網站地址
我們爬取的是糗事百科裡的段子,所以糗事百科的網址奉上(https://www.qiushibaike.com/hot/)

二、獲取原始碼

 request = urllib2.Request(finallyurl,headers = headers)
 response = urllib2.urlopen(request)
 content = response.read().decode('utf-8')

這裡用的是urllib庫獲取的html,若你的python環境是python3以上,可以檢視我的上一篇部落格(https://blog.csdn.net/m0_43445668/article/details/83153946)
那裡面有python3以上版本獲取原始碼的步驟

三、匹配內容
通過正則匹配我們所需要的內容,括號裡的(.*?)是非貪婪匹配,也是我們一會兒輸出的內容
正則很重要,一定要好好學啊
這個正則你也可以自己試著寫寫哦,鍛鍊一下自己
這裡面re.S的作用是:使 . 匹配包括換行在內的所有字元

re.compile(r'<div.*?author clearfix">.*?</a>.*?h2>(.*?)</h2>.*?'+'<div.*?content">.*?<span>(.*?)</span>(.*?)'+'<div class="stats.*?class="number">(.*?)</i>',re.S)     

有的段子中含有圖,在爬取的時候,可以去掉,圖太佔地方,以下程式碼就是去圖的,可以看下

for item in items:
    haveImg = re.search("img",item[2])
    if not haveImg:
        substance = item[1].replace('<br/>', '\n').replace('\n','')

四、寫入TXT文件

fo = open('duanzi.txt','a')
fo.write(end)
fo.close()

五、完整程式碼

# -*- coding:utf-8 -*-
import urllib2
import re
url = 'https://www.qiushibaike.com/hot/'
user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134'
headers = {'User-Agent': user_agent}
def title(finallyurl):
    try:
        request = urllib2.Request(finallyurl,headers = headers)
        response = urllib2.urlopen(request)
        content = response.read().decode('utf-8')
        pattern = re.compile(r'<div.*?author clearfix">.*?</a>.*?h2>(.*?)</h2>.*?'+'<div.*?content">.*?<span>(.*?)</span>(.*?)'+'<div class="stats.*?class="number">(.*?)</i>',re.S)
        items = re.findall(pattern, content)
        fo = open('duanzi.txt', 'a')
        fo.write("*******************************************第%s頁*****************************************" % i)
        for item in items:
            haveImg = re.search("img",item[2])
            if not haveImg:
                substance = item[1].replace('<br/>', '\n').replace('\n','')
                end = '\n' + '釋出者:' +item[0].encode('UTF-8') + '內容:' + substance.encode('UTF-8') + '\n' + '點贊數:' +item[3].encode('UTF-8') + '\n'
                # 讀取糗事百科的內容寫入txt文件
                fo = open('duanzi.txt','a')
                fo.write(end)
                fo.close()
                print "釋出人: ", item[0], "內容:", substance, "點贊數:", item[3]
    except urllib2.URLError,e:
        if hasattr(e, "code"):
            print e.code
        if hasattr(e, "reason"):
            print e.reason
    return
#遍歷獲取多頁糗事百科的內容
for i in range(1,25):
    finallyurl = url + 'page/' + str(i) + '/'
    print "第%s頁" % i
    title(finallyurl)

結果展示