抓取网页新闻( 2017年04月21日Python正则抓取网易新闻的方法 )

优采云 发布时间: 2022-01-14 04:02

  抓取网页新闻(

2017年04月21日Python正则抓取网易新闻的方法

)

  Python正则爬取网易新闻的方法示例

  更新时间:2017-04-21 14:37:22 作者:Shine I want

  本文文章主要介绍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=''>")

data=reg1.sub(' ',data)

reg2=re.compile('\]')

data=reg2.sub('',data)

reg3=re.compile('

')

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()

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线