抓取网页新闻(Python正则抓取网易新闻的方法结合实例形式较为详细的分析 )

优采云 发布时间: 2021-11-13 10:14

  抓取网页新闻(Python正则抓取网易新闻的方法结合实例形式较为详细的分析

)

  本文文章主要介绍Python定时抓取网易新闻的方法,结合实例形式,更详细的分析了使用Python进行网易新闻抓取操作的相关实现技巧和注意事项,有需要的朋友可以参考以下

  本文介绍Python定时抓取网易新闻的方法。分享给大家,供大家参考,如下:

  写了一些爬取网易新闻的爬虫,发现它的网页源代码和网页上的评论根本不正确,于是我用抓包工具获取了它的评论隐藏地址(每个浏览器都有自己的自己的抓包工具可以用来分析网站)

  如果你仔细观察,你会发现有一个特别的,那么这个就是你想要的

  

  然后打开链接,找到相关的评论内容。(下图为第一页内容)

  

  接下来是代码(也是按照大神重写的)。

  #coding=utf-8

import urllib2

import re

import json

import time

class 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=&#39;&#39;>")

data=reg1.sub(&#39; &#39;,data)

reg2=re.compile(&#39;\]&#39;)

data=reg2.sub(&#39;&#39;,data)

reg3=re.compile(&#39;

&#39;)

data=reg3.sub(&#39;&#39;,data)

return data

#解析json

def dealJSON(self):

with open("WY.txt","a") as file:

file.write(&#39;ID&#39;+&#39;|&#39;+&#39;评论&#39;+&#39;|&#39;+&#39;踩&#39;+&#39;|&#39;+&#39;顶&#39;+&#39;\n&#39;)

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(&#39;WY.txt&#39;,&#39;a&#39;)

for item in value[&#39;hotPosts&#39;]:

try:

file.write(item[&#39;1&#39;][&#39;f&#39;].encode(&#39;utf-8&#39;)+&#39;|&#39;)

file.write(item[&#39;1&#39;][&#39;b&#39;].encode(&#39;utf-8&#39;)+&#39;|&#39;)

file.write(item[&#39;1&#39;][&#39;a&#39;].encode(&#39;utf-8&#39;)+&#39;|&#39;)

file.write(item[&#39;1&#39;][&#39;v&#39;].encode(&#39;utf-8&#39;)+&#39;\n&#39;)

except:

continue

file.close()

print &#39;--正在采集%d/12--&#39;%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(&#39;WY.txt&#39;,&#39;a&#39;)

for item in value[&#39;newPosts&#39;]:

try:

file.write(item[&#39;1&#39;][&#39;f&#39;].encode(&#39;utf-8&#39;)+&#39;|&#39;)

file.write(item[&#39;1&#39;][&#39;b&#39;].encode(&#39;utf-8&#39;)+&#39;|&#39;)

file.write(item[&#39;1&#39;][&#39;a&#39;].encode(&#39;utf-8&#39;)+&#39;|&#39;)

file.write(item[&#39;1&#39;][&#39;v&#39;].encode(&#39;utf-8&#39;)+&#39;\n&#39;)

except:

continue

file.close()

print &#39;--正在采集%d/12--&#39;%i

time.sleep(5)

if __name__ == &#39;__main__&#39;:

WY().dealJSON()

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线