1. 程式人生 > >爬蟲第三戰 json爬取網易新聞

爬蟲第三戰 json爬取網易新聞

出洞,寫程式碼,本熊這次要帶來的新內容是涉及到一部分動態網頁的問題,爬取網易新聞,感覺這次難度不是一般的大,好吧,,其實我每次都是這麼想的。我什麼時候能寫出非常棒的程式碼呢(圖樣圖森破),轉回正題,NOW

如果按以前的老套路一定是上網址,放程式碼等等但這次這個套路似乎已經行不通了,當開啟新聞評論所在的網址的原始碼時,搞什麼!!什麼也沒有,莫方莫方,不是我們的評論被黑掉了,只是我們的開啟方式不正確,換個姿勢試一下,在評論頁面按下f12有驚喜,dell機如果用著快捷鍵需要fn+f12才好,點選網路,重新整理,在其中找到 json ,在json專案下發現了這個傢伙


開啟,是不是裡面有那些“藏起來的”評論,


那麼現在就需要處理這些長著字典樣子的json檔案了,在處理之前先要把那些不需要的東西刪除,接下來,將在程式碼中具體解決這些問題

# coding:utf-8
import re
import urllib2
import json           # 我們的新夥伴
import time
class Counter(dict):      
    def _missing_(self,key):
        return None
for l in range(0,3):
    url = 'http://comment.sports.163.com/api/v1/products/a2869674571f77b5a0867c3d71db5856/threads/C56ACHMM00058782/comments/newList?offset=%d&limit=30&showLevelThreshold=72&headLimit=1&tailLimit=2&callback=getData&ibc=newspc&_=1478429803769' %l
    user_agent = 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0' # 進行模擬登陸
    headers = { 'User-Agent' : user_agent }
    response = urllib2.Request(url, headers=headers)
    html = urllib2.urlopen(response).read()   # 開啟讀取網址
    def getitem():
        reg = re.compile(r'getData\(')       
        data = reg.sub('',html)
        reg1 = re.compile(r"\)\;")
        data = reg1.sub(' ', data)           # 包括之前的幾步都是處理原始碼,將多餘的部分刪掉使它成為json格式
        f = open('yi6.text' , 'a+')          # 開啟文字
        json_ = json.loads(data)             # 格式轉換
        c = Counter(json_)
        for i in json_['comments']:
            f.write(json_['comments'][i]['user'].setdefault('nickname' , 'none').encode('utf-8')+('|') )  # 以字典的方式獲取內容並寫入
            f.write(json_['comments'][i]['content'].encode('utf-8')+'\n')
        f.close()
    getitem()

按照套路到這裡就應該說結束語了,畢竟這個模組從一開始就反常結尾怎麼會不反常呢,在這要解釋一個東西,在一開始呼叫Counter,


使setdefault構成一個判斷,當字典中nickname不存在時,不會報錯而是輸出none代替

歡迎各位大神批評指教,THANKS