四年前的文章了,现在才看见没通过。。。。当初明明过了的。。。

1.前些天打开网易新闻,于是点开爬取该新闻的评论。

2.以前爬取的网页都是静态的,都是源代码中直接就有,一眼就可以观察到的,而这次打开却不一样,根本没有自己想要的评论内容。然后通过搜索学习,知道了获取数据的办法。主要是html中的JavaScript和Python中json模块。

具体步骤如下:

1.输入网址,用谷歌浏览器获取json数据

输入网址后,按F12,出现该界面

2.查找所需要的数据

观察加载的这些内容可以发现,有图片,有html文件等。一开始并不知道评论内容存在哪里,搜索html依次查看

点击Preview进行查看,发现红框里的内容才是需要的数据

3.点击headers获取url

这个url只有一个,加载的是“热门跟帖”的内容,而加载“最新跟帖”的到现在有17个

打开一个网址,是以json数据进行显示的

这里附了张图,应该不合法。。。。

其他的页面的显示形式也是相同的。

4.写代码爬取数据,一开始只对一页内容进行爬取

一开始从来没有接触过json数据,不知道怎么爬取,开始的思路是想用BeautifulSoup模块,可是这是用js写的,于是就想用正则匹配将没用的全部替换掉,留下想要的内容。后来发现这是不可行的。然后便去了解json。

最后明白,获取的网页中json数据声明了一个变量,然后该变量用花括号将所有评论内容包含进去了。

思路转换为通过Python中字典的用法,用key进行取值,得到想要的内容。

json.dumps()方法可以将Python对象编码为json字符串(encoding)

json.loads()方法可以将json格式的字符串解码为Python对象(decoding)

可以看这个关于Python处理json的文章:

http://liuzhijun.iteye.com/blog/1859857

http://www.cnblogs.com/coser/archive/2011/12/14/2287739.html

所以爬取第一页的代码为:

<span style="font-size:18px;">#coding:utf-8
import urllib
import re
import json
#用户id+评论+顶
def getHtml(url):page=urllib.urlopen(url)html=page.read()return html
def getItems(html):#一开始写的时候还在该函数的开始加了这两句代码,主要就是这两个方法没有了解清楚#data1=json.dumps(html)#data=json.loads(data1)#这是没必要的,直接替换再转换就可以。将开头的var replyData=和结尾的;替换掉再转成Python时才能对字典进行处理reg=re.compile(" \[<a href=''>")data=reg.sub(' ',html)reg1=re.compile("var replyData=")data=reg1.sub(' ',data)reg2=re.compile('<\\\/a>\]')data=reg2.sub('',data)reg3=re.compile(';')data=reg3.sub('',data)reg4=re.compile('<span(.*?)/span>')#<span>(.*?)</span>这样匹配是不对的,替换不掉(还不清楚原因)data=reg4.sub('',data)reg5=re.compile('')data=reg5.sub('',data)data=json.loads(data)#这句代码的作用是将数据转换成Python对象,然后根据字典的key取值得到想要的内容f=open('wy.txt','a+')for i in data['hotPosts']:f.write(i['1']['f'].encode('utf-8')+'\n')f.write(i['1']['b'].encode('utf-8')+'\n')f.write(i['1']['v'].encode('utf-8')+'\n')f.close()url='http://comment.news.163.com/data/news_guonei8_bbs/df/B9C8EJDC0001124J_1.html'#(热门跟帖)
html=getHtml(url)
getItems(html)</span>

5.爬取多页数据

#coding:utf-8
import urllib2
import re
import json
class WYTie():def __init__(self):self.pageIndex=1self.usr_agent="Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36"self.headers={'Usr_Agent':self.usr_agent}self.url1='http://comment.news.163.com/data/news_guonei8_bbs/df/B9C8EJDC0001124J_1.html'def getUrl(self,pageIndex):url2='http://comment.news.163.com/cache/newlist/news_guonei8_bbs/B9C8EJDC0001124J_'+str(pageIndex)+'.html'return url2def getHtml(self,url):try:request=urllib2.Request(url,headers=self.headers)page=urllib2.urlopen(request)html=page.read()return htmlexcept urllib2.URLError,e:if hasattr(e,'reason'):print u'连接失败',e.reasonreturn None#网址打开第一页有热门跟帖和最新跟帖,而第二页往后显示的都是最新跟帖#先处理热门跟帖,因为网址是固定的只有一个。然后处理多页的最新跟帖#获取热门跟帖的内容。def getReply(self):url=self.url1data=self.getHtml(url)rep=re.compile(" \[<a href=''>")data=rep.sub(' ',data)rep1=re.compile("<\\\/a>\]")data=rep1.sub(' ',data)rep2=re.compile("<span(.*?)/span>")data=rep2.sub(' ',data)rep3=re.compile("var replyData=")data=rep3.sub(' ',data)rep4=re.compile(";")data=rep4.sub(' ',data)data0=json.loads(data)#进行转换,得到dict类型,访问字典f=open('wyNews.txt','a')for i in data0['hotPosts']:f.write(i['1']['f'].encode('utf-8')+'\n')f.write(i['1']['b'].encode('utf-8')+'\n')f.write(i['1']['v'].encode('utf-8')+'\n')f.close()#获取多页的热门跟帖def getPostlist(self):L=range(1,18)for pageIndex in L:url=self.getUrl(pageIndex)data=self.getHtml(url)rep=re.compile(" \[<a href=''>")data=rep.sub(' ',data)rep1=re.compile("<\\\/a>\]")data=rep1.sub(' ',data)rep2=re.compile("<span(.*?)/span>")data=rep2.sub(' ',data)rep3=re.compile("var newPostList=")data=rep3.sub(' ',data)rep4=re.compile(";")data=rep4.sub(' ',data)data1=json.loads(data)#进行转换,得到dict类型,访问字典f=open('wyNews.txt','a')for i in data1['newPosts']:f.write(i['1']['f'].encode('utf-8')+'\n')f.write(i['1']['b'].encode('utf-8')+'\n')f.write(i['1']['v'].encode('utf-8')+'\n')f.close()spider=WYTie()
spider.getReply()
spider.getPostlist()</span>

代码是正确的,内容也都完全爬取下来,不过写完后发现一个问题就是,两次替换都差不多,每个函数重复一遍让代码显得很不简洁。然后就把替换的内容写成一个函数而后调用就可以了。

下面是代码:

# encoding=utf-8
import urllib2
import json
import re
class WYTie():def __init__(self):self.user_agent='Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36'self.headers={'User-Agent':self.user_agent}self.url1='http://comment.news.163.com/data/news_guonei8_bbs/df/B9C8EJDC0001124J_1.html'def getUrl(self,pageIndex):url2='http://comment.news.163.com/cache/newlist/news_guonei8_bbs/B9C8EJDC0001124J_'+str(pageIndex)+'.html'return url2def getHtml(self,url):try:request=urllib2.Request(url,headers=self.headers)page=urllib2.urlopen(request)html=page.read()return htmlexcept urllib2.URLError,e:if hasattr(e,'reason'):print u"连接失败",e.reasonreturn  None#将所有替换写成函数,在后面进行调用def getRaplace(self,data,i):if i==1:data=data.replace('var replyData=','')else:data=data.replace('var newPostList=','')rep=re.compile(" \[<a href=''>")data=rep.sub('--',data)rep2=re.compile('<\\\/a>\]')data=rep2.sub('',data)rep3=re.compile("<span(.*?)/span>")data=rep3.sub(' ',data)rep4=re.compile(";")data=rep4.sub(' ',data)return data#将数据转换并进行存储def getItems(self):with open('wynewsssss.txt','a') as f:f.write('用户名'+'|'+'评论'+'|'+'顶'+'\n')for pageIndex in range(1,18):if pageIndex==1:url=self.url1data=self.getHtml(url)data=self.getRaplace(data,pageIndex)value=json.loads(data)f=open('wynewsssss.txt','a')for item in value['hotPosts']:f.write(item['1']['f'].encode('utf-8')+'|')f.write(item['1']['b'].encode('utf-8')+'|')f.write(item['1']['v'].encode('utf-8')+'\n')f.close()else:url=self.getUrl(pageIndex)data=self.getHtml(url)data=self.getRaplace(data,pageIndex)value=json.loads(data)f=open('wynewsssss.txt','a')for item in value['newPosts']:f.write(item['1']['f'].encode('utf-8')+'|')f.write(item['1']['b'].encode('utf-8')+'|')f.write(item['1']['v'].encode('utf-8')+'\n')f.close()spider=WYTie()
spider.getItems()

Python爬取新闻动态评论相关推荐

  1. python爬新闻动态_Python爬取新闻动态评论

    四年前的文章了,现在才看见没通过....当初明明过了的... 1.前些天打开网易新闻,于是点开爬取该新闻的评论. 2.以前爬取的网页都是静态的,都是源代码中直接就有,一眼就可以观察到的,而这次打开却不 ...

  2. 通过爬取天猫商品评论实例分析Python爬取ajax动态生成的数据

    本文主要通过爬取天猫商品kindle的评论为例来说明利用python爬取ajax动态生成的数据的方式,本文使用的工具如下: 工具 chrome浏览器[寻找评论的动态链接] python3.5[执行代码 ...

  3. python爬取爱情公寓电影评论并制作词云

    python爬取爱情公寓电影评论并制作词云 前言:     一直想研究研究如何生成词云,今天抽点时间给大家分享一下制作词云的过程,本文重在研究词云如何制作,由于时间仓促,至于爬取的数据量不大,大家可自 ...

  4. Python爬取京东商品评论

    京东商城的页面不是静态页面,其评论信息存放于json文件中,由ajax控制,所以我们在浏览器上看到的网页源代码和用Python爬下来的是不一样的,所以我们真正要爬取的是评论数据所存放的json文件. ...

  5. Python爬取京东商品评论和图片下载

    Python爬取京东商品评论和图片下载 代码仅供学习使用,切勿扩散并且频繁爬取网站 贴上代码和注释,方便自己下次看 import requests import time import json im ...

  6. python爬取B站评论制作词云

    python爬取B站评论制作词云 江山代有才人出,B站评论占一半 废话不多说,咱们直接上代码` import imageio import jieba import wordcloud import ...

  7. python爬淘宝app数据_一篇文章教会你用Python爬取淘宝评论数据(写在记事本)

    [一.项目简介] 本文主要目标是采集淘宝的评价,找出客户所需要的功能.统计客户评价上面夸哪个功能多,比如防水,容量大,好看等等. [二.项目准备工作] 准备Pycharm,下载安装等,可以参考这篇文章 ...

  8. Python - 爬取豆瓣短评评论

    Python - 爬取豆瓣短评评论 import requests from bs4 import BeautifulSoup import re import time# 保存豆瓣评分 source ...

  9. 用python爬取天猫商品评论并分析(2)

    用python爬取天猫商品评论并分析(2) 之前介绍过天猫数据的爬取和数据初步处理,今天介绍下 将采集的评论进行文本分析!下面是总流程: 0. 主要流程 0. 数据采集 这一步参考网址:https:/ ...

最新文章

  1. Isomorphic Strings
  2. Mac 技术篇-通过AppScript编写脚本实现设置快捷键打开指定程序实例演示
  3. Maximum.TV 发布西班牙语Silverlight TV网站
  4. 复读数组(nowcoder 1103A)
  5. 敏捷中gwt含义_在您的GWT应用程序中添加JSON功能
  6. oracle虚拟机怎么装系统,Virtualbox怎么安装系统 VirtualBox虚拟机安装Win8系统教程 (3)...
  7. C++知识点:typedef struct、printf
  8. 20180517 迭代器
  9. 华为可以升级鸿蒙的机型,首批升级鸿蒙机型提前泄露,华为这保密措施需要加强...
  10. Linux系统调用表:x86和x86_64
  11. rust建深海_rust怎么移动自己的领地柜 | 手游网游页游攻略大全
  12. tcp/udp/socket 端口映射,转发小工具
  13. nginx日志采集 mysql_shell + go + mysql nginx日志统计 (三) :数据的展示
  14. 快来了解一下5个超实用的WPS表格操作技巧!
  15. 谷歌正式放弃与雅虎的广告合作计划
  16. linux程序设计x11,让Linux支持X11 Forwarding
  17. 流利阅读day1 Dysmorphia
  18. 我国网络营销发展的现状、障碍与对策
  19. 【更新于12.29】深度学习论文汇总
  20. 订单系统设计 --- SaaS订单中心存储方案

热门文章

  1. C语言实现Linux网络嗅探器
  2. 洛谷-P5734-文字处理软件
  3. centos8 + kubernetes 1.24 master/node 节点
  4. ylmf3.0 分配修改登录root用户管理权限的方法
  5. 新增 130 亿美元债务,马斯克要如何让 Twitter “活”下去?
  6. 最最基础的前端技能(上)
  7. access中本年度的四月一日_有朝一日重逢,定会深深地相拥 |为你读诗
  8. html引用豆瓣电影图片地址失效
  9. 豆瓣电影Top 250排行榜海报图片下载
  10. matplotlib中font_manager.FontProperties找不到路径中的字体