1. 程式人生 > >自制爬蟲,爬取分類總閱讀量,總評論量。全部文章閱讀量和,以及評論量和。但是發現數據不對

自制爬蟲,爬取分類總閱讀量,總評論量。全部文章閱讀量和,以及評論量和。但是發現數據不對

def tt(a,name):
    global ss
    global cc
    sum = 0
    com = 0
    pages = 10
    x = 1
    nn = []
    mm = []

其中global,很重要。沒有這個global會報錯誤!!
全部程式碼:

import requests
import re
ss = 0
cc = 0
empty = []
def tt(a,name):
    global ss
    global cc
    sum = 0
    com = 0
    pages = 10
    x = 1
    nn = []
    mm = []
    base_url = "https://blog.csdn.net/weixin_42859280/article/category/"
    print('\n-------------------------'+name+'-------------------------')
    print('-------------------------下面是原創的-------------------------\n')
    for x in range(pages):
        w = 0
        r = requests.get(base_url+str(a)+'/'+str(x+1)+'?t=1&orderby=ViewCount')
        titles = re.findall(r'<span class="article-type type-.*?">\n.*?</span>\n(.*?)</a>', r.content.decode(), re.MULTILINE)
        visits = re.findall( r'<span class="read-num">閱讀數:(.*?)</span>', r.content.decode())
        mm = re.findall( r'<span class="read-num">評論數:(.*?)</span>', r.content.decode())
        nn = [int(x) for x in visits] #將閱讀數轉換為數字
        nn = nn[1:]
        mm = mm[1:]
        n = 1
        for x, y, z in zip(titles, nn,mm):
            ff = open(name+'.txt','a')
            if n%10 == 0:
                ff.write(titles[w]+' 閱讀數:'+str(nn[w])+' 評論數:'+mm[w]+' \n\n')
            else:
                ff.write(titles[w]+' 閱讀數:'+str(nn[w])+' 評論數:'+mm[w]+' \n')
            ff.close()
            n += 1
            #if int(nn[w]) > 1000:
            #if int(mm[w]) > 0:
            print(titles[w]+' \t\t閱讀數:'+str(nn[w])+' \t\t評論數:'+mm[w])
            sum += int(nn[w])
            com += int(mm[w])
            w+=1
    print('\n-------------------------下面是轉載的------------------------')

    ff = open(name+'.txt','a')
    ff.write(' \n\n 下面就是轉載的!\n\n')
    ff.close()

    pages = 11
    x = 1
    nn = []
    mm = []
    for x in range(pages):
        w = 0
        r = requests.get(base_url+str(a)+'/'+str(x+1)+'?t=2&orderby=ViewCount')
        titles = re.findall(r'<span class="article-type type-.*?">\n.*?</span>\n(.*?)</a>', r.content.decode(), re.MULTILINE)
        visits = re.findall( r'<span class="read-num">閱讀數:(.*?)</span>', r.content.decode())
        mm = re.findall( r'<span class="read-num">評論數:(.*?)</span>', r.content.decode())
        nn = [int(x) for x in visits] #將閱讀數轉換為數字
        nn = nn[1:]
        mm = mm[1:]
        n = 1
        for x, y, z in zip(titles, nn,mm):
            ff = open(name+'.txt','a')
            if n%10 == 0:
                ff.write(titles[w]+' 閱讀數:'+str(nn[w])+' 評論數:'+mm[w]+' \n\n')
            else:
                ff.write(titles[w]+' 閱讀數:'+str(nn[w])+' 評論數:'+mm[w]+' \n')
            ff.close()
            n += 1
            #if int(nn[w]) > 1000:
            #if int(mm[w]) > 0:
            print(titles[w]+' \t閱讀數:'+str(nn[w])+' \t評論數:'+mm[w])
            sum += int(nn[w])
            com += int(mm[w])
            w+=1
    ss += int(sum)
    cc += int(com)
    print("總閱讀量:"+str(sum)+"  總評論量:"+str(com))
    ww = name+"  總閱讀量:"+str(sum)+"   總評論量:"+str(com)
    empty.append(ww)
    ff = open(name+'.txt','a')
    ff.write(' \n 總閱讀量:'+str(sum))
    ff.write('   總評論量:'+str(com))
    ff.close()

tt(8100910,'基礎啦')
tt(8125178,'轉載啦,方便找! ')
tt(8128370,'基石一般的東西!')
tt(8128378,' 自己找的一點CMD命令!嘻嘻~ ')
tt(8251895,' Linux CENTOS')
tt(8252351,'網路交換機與路由器 ')
tt(8252355,' Windows ')
tt(8252363,'計算機網路')
tt(8252366,' Linux ')
tt(8276398,' 看起來比較牛X的一些小玩意 ')
tt(8292701,'小米開啟Fn ')
tt(8300944,' python '+'.txt')
tt(8309287,' 網路空間安全學習筆記')
tt(8460562,'Python語言及其應用學習! ')
tt(8493893,' ACM爭取每日一oj! ')
tt(8518453,'C,C++語言程式設計基礎知識!')
tt(8529012,'演算法問題 ')

print("全部文章總閱讀量:"+str(ss)+"  全部文章總評論量:"+str(cc))
for i in empty:
    print(i)

執行後文件截圖:
在這裡插入圖片描述
程式碼截圖:
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
最後:
在這裡插入圖片描述
留著以後用·
不過,具體實現過程沒有寫。
想學的話,給我留言。
我教你呀~