python2.7通过模块获取好奇心日报的文章信息(通过json数据进行获取)

 python2.7通过模块获取好奇心日报的文章信息

困住我的点:不理解各个json数据url链接之间的相互关系,后面发现是这个last_key在这其中惹的祸,原来的时间戳,因此之后在处理过程中,就会大致明白,其实10位数字参与构成url地址的,我们就要考虑是不是时间戳了。

通过time模块获取当前时间的时间戳对应值

>>> import time
>>> time.time()
1536743737.845
>>> int(time.time())
1536743747
>>>

 将我们的本地指定时间转换为时间戳:

>>> time1 = '1996-10-21 10:23:00'
>>> timeArr = time.strptime(time1, '%Y-%m-%d %H:%M:%S')
>>> timeArr
time.struct_time(tm_year=1996, tm_mon=10, tm_mday=21, tm_hour=10, tm_min=23, tm_sec=0, tm_wday=0, tm_yday=295, tm_isdst=-1)
>>> timeStamp = time.mktime(timeArr)
>>> timeStamp
845864580.0
>>> timeStamp = int(time.mktime(timeArr))
>>> timeStamp
845864580

 将时间戳转换为'%Y-%m-%d %H:%M:%S'时间格式:

>>> timeStamp = 1533160253
>>> timeArr = time.localtime(timeStamp)
>>> time = time.strftime('%Y-%m-%d %H:%M:%S', timeArr)
>>> time
'2018-08-02 05:50:53'
>>>
#encoding=utf-8
import requests
import json
import re
from lxml import etree

# 遇到8位数字组成的数字可以考虑是否是时间戳参与构成了url地址
# 赋予初始的url地址
last_key = '1533160253'

# 设置一个循环的次数,获取指定时间段之间的qdaily中的文章信息,,获取从0-4共5个json数据,100条
for i in range(5):
	url = 'http://www.qdaily.com/tags/tagmore/1068/%s.json' %last_key
	# 用try包含我们请求的语句,从而可以在访问出错时,帮助我们确定位置
	try:
		r = requests.get(url)
		r.encoding = r.apparent_encoding
	except Exception as e:
		print '获取信息失败'

	# 将获取的json数据转换为python可以处理的格式,dict
	content = json.loads(r.text)
	info = {}
	# 获取数据主体,即文章列表
	data = content['data']['feeds']

	# 对我们设置的每篇文章的数据信息进行提取
	for item in data:
		info['title'] = item['post']['title']
		info['artical_id'] = item['post']['id']
		# info['author_name'] = item['post']['author']['name']
		info['super_tag'] = item['post']['super_tag']
		info['comment_count'] = item['post']['comment_count']
		info['praise_count'] = item['post']['praise_count']
		info['category'] = item['post']['category']['title']
		info['artical_url'] = 'http://www.qdaily.com/articles/%s.html' %info['artical_id']

		# 拼接url地址   由于在json数据中无法得知文章作者信息,所以我们到文章源网页去寻找数据	
		artical_url = 'http://www.qdaily.com/articles/%s.html' %info['artical_id']
		r = requests.get(artical_url)

		# 通过lxml中的etree帮助我们将html文件转换为可以进行xpath查找的对象
		html = etree.HTML(r.text)
		# info['author_name'] = re.findall(r'<span class="name">(.+?)</span>', html, re.S)[0]

		info['author_name'] = html.xpath('/html/body/div[3]/div/div[1]/div[2]/div[1]/div[1]/span[1]/text()')

		# 在文件的同一级目录下打开一个文件用于写入我们获取到的数据信息
		with open('test.json', 'a') as f:
			data = data = json.dumps(dict(info), ensure_ascii=False) + '\n'
			f.write(data)
			f.close()
	# 更新我们的last_keys进行下一个json数据的获取
	last_key = content['data']['last_key']

	# 输出一个json数据中第一个文章的标题,便于识别获取文章的位置
	print info['title'] + '\n' + '%s文件写入完成' %last_key

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值