本文實例講述了Python正則抓取網易新聞的方法。分享給大家供大家參考,具體如下:
自己寫了些關于抓取網易新聞的爬蟲,發現其網頁源代碼與網頁的評論根本就對不上,所以,采用了抓包工具得到了其評論的隱藏地址(每個瀏覽器都有自己的抓包工具,都可以用來分析網站)
如果仔細觀察的話就會發現,有一個特殊的,那么這個就是自己想要的了

然后打開鏈接就可以找到相關的評論內容了。(下圖為第一頁內容)

接下來就是代碼了(也照著大神的改改寫寫了)。
#coding=utf-8import urllib2import reimport jsonimport timeclass WY(): def __init__(self): self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/534.24 (KHTML, like '} self.url='http://comment.news.163.com/data/news3_bbs/df/B9IBDHEH000146BE_1.html' def getpage(self,page): full_url='http://comment.news.163.com/cache/newlist/news3_bbs/B9IBDHEH000146BE_'+str(page)+'.html' return full_url def gethtml(self,page): try: req=urllib2.Request(page,None,self.headers) response = urllib2.urlopen(req) html = response.read() return html except urllib2.URLError,e: if hasattr(e,'reason'): print u"連接失敗",e.reason return None #處理字符串 def Process(self,data,page): if page == 1: data=data.replace('var replyData=','') else: data=data.replace('var newPostList=','') reg1=re.compile(" /[<a href=''>") data=reg1.sub(' ',data) reg2=re.compile('<////a>/]') data=reg2.sub('',data) reg3=re.compile('<br>') data=reg3.sub('',data) return data #解析json def dealJSON(self): with open("WY.txt","a") as file: file.write('ID'+'|'+'評論'+'|'+'踩'+'|'+'頂'+'/n') for i in range(1,12): if i == 1: data=self.gethtml(self.url) data=self.Process(data,i)[:-1] value=json.loads(data) file=open('WY.txt','a') for item in value['hotPosts']: try: file.write(item['1']['f'].encode('utf-8')+'|') file.write(item['1']['b'].encode('utf-8')+'|') file.write(item['1']['a'].encode('utf-8')+'|') file.write(item['1']['v'].encode('utf-8')+'/n') except: continue file.close() print '--正在采集%d/12--'%i time.sleep(5) else: page=self.getpage(i) data = self.gethtml(page) data = self.Process(data,i)[:-2] # print data value=json.loads(data) # print value file=open('WY.txt','a') for item in value['newPosts']: try: file.write(item['1']['f'].encode('utf-8')+'|') file.write(item['1']['b'].encode('utf-8')+'|') file.write(item['1']['a'].encode('utf-8')+'|') file.write(item['1']['v'].encode('utf-8')+'/n') except: continue file.close() print '--正在采集%d/12--'%i time.sleep(5)if __name__ == '__main__': WY().dealJSON()以上就是我爬取的代碼了。
PS:這里再為大家提供2款非常方便的正則表達式工具供大家參考使用:
JavaScript正則表達式在線測試工具:
http://tools.VeVB.COm/regex/javascript
正則表達式在線生成工具:
http://tools.VeVB.COm/regex/create_reg
更多關于Python相關內容可查看本站專題:《Python正則表達式用法總結》、《Python數據結構與算法教程》、《Python Socket編程技巧總結》、《Python函數使用技巧總結》、《Python字符串操作技巧匯總》、《Python入門與進階經典教程》及《Python文件與目錄操作技巧匯總》
希望本文所述對大家Python程序設計有所幫助。
新聞熱點
疑難解答
圖片精選