爬蟲第三戰 json爬取網易新聞
阿新 • • 發佈:2019-02-19
出洞,寫程式碼,本熊這次要帶來的新內容是涉及到一部分動態網頁的問題,爬取網易新聞,感覺這次難度不是一般的大,好吧,,其實我每次都是這麼想的。我什麼時候能寫出非常棒的程式碼呢(圖樣圖森破),轉回正題,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