iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python 简单爬取今日头条热点新闻(
  • 651
分享到

python 简单爬取今日头条热点新闻(

头条热点新闻简单 2023-01-30 23:01:42 651人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

今日头条如今在自媒体领域算是比较强大的存在,今天就带大家利用python爬去今日头条的热点新闻,理论上是可以做到无限爬取的; 在浏览器中打开今日头条的链接,选中左侧的热点,在浏览器开发者模式network下很快能找到一个‘?cateGor

今日头条如今在自媒体领域算是比较强大的存在,今天就带大家利用python爬去今日头条的热点新闻,理论上是可以做到无限爬取的;

在浏览器中打开今日头条的链接,选中左侧的热点,在浏览器开发者模式network下很快能找到一个‘?cateGory=new_hot...’字样的文件,查看该文件发现新闻内容的数据全部存储在data里面,且能发现数据类型为JSON;如下图:

这样一来就简单了,只要找到这个文件的requests url即可通过Python requests来爬取网页了;

查看请求的url,如下图:

发现链接为:https://www.toutiao.com/api/pc/feed/?category=news_hot&utm_source=toutiao&widen=1&max_behot_time=0&max_behot_time_tmp=0&tadrequire=true&as=A1B5AC16548E0FA&cp=5C647E601F9AEE1&_signature=F09fYAAASzBjiSc9oUU9MxdPX3

其中有9个参数,对比如下表:

其中max_behot_time在获取的json数据中获得,具体数据见如下截图:

 

在网上找了下大神对as和cp算法的分析,发现两个参数在js文件:home_4abea46.js中有,具体算法如下代码:

!function(t) {
    var e = {};
    e.getHoney = function() {
        var t = Math.floor((new Date).getTime() / 1e3)
          , e = t.toString(16).toUpperCase()
          , i = md5(t).toString().toUpperCase();
        if (8 != e.length)
            return {
                as: "479BB4B7254C150",
                cp: "7E0AC8874BB0985"
            };
        for (var n = i.slice(0, 5), a = i.slice(-5), s = "", o = 0; 5 > o; o++)
            s += n[o] + e[o];
        for (var r = "", c = 0; 5 > c; c++)
            r += e[c + 3] + a[c];
        return {
            as: "A1" + s + e.slice(-3),
            cp: e.slice(0, 3) + r + "E1"
        }
    }
    ,
    t.ascp = e
}(window, document),

 python获取as和cp值的代码如下:(代码参考blog:Https://www.cnblogs.com/xuchunlin/p/7097391.html)

def get_as_cp():  # 该函数主要是为了获取as和cp参数,程序参考今日头条中的加密js文件:home_4abea46.js
	zz = {}
	now = round(time.time())
	print(now) # 获取当前计算机时间
	e = hex(int(now)).upper()[2:] #hex()转换一个整数对象为16进制的字符串表示
	print('e:', e)
	a = hashlib.md5()  #hashlib.md5().hexdigest()创建hash对象并返回16进制结果
	print('a:', a)
	a.update(str(int(now)).encode('utf-8'))
	i = a.hexdigest().upper()
	print('i:', i)
	if len(e)!=8:
		zz = {'as':'479BB4B7254C150',
		'cp':'7E0AC8874BB0985'}
		return zz
	n = i[:5]
	a = i[-5:]
	r = ''
	s = ''
	for i in range(5):
		s= s+n[i]+e[i]
	for j in range(5):
		r = r+e[j+3]+a[j]
	zz ={
	'as':'A1'+s+e[-3:],
	'cp':e[0:3]+r+'E1'
	}
	print('zz:', zz)
	return zz

  这样完整的链接就构成了,另外提一点就是:_signature参数去掉也是可以获取到json数据的,因此这样请求的链接就完成了;下面附上完整代码:

import requests
import json
from openpyxl import Workbook
import time
import hashlib
import os
import datetime

start_url = 'https://www.toutiao.com/api/pc/feed/?category=news_hot&utm_source=toutiao&widen=1&max_behot_time='
url = 'https://www.toutiao.com'

headers={
	'user-agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWEBKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
}
cookies = {'tt_webid':'6649949084894053895'} # 此处cookies可从浏览器中查找,为了避免被头条禁止爬虫

max_behot_time = '0'   # 链接参数
title = []       # 存储新闻标题
source_url = []  # 存储新闻的链接
s_url = []       # 存储新闻的完整链接
source = []      # 存储发布新闻的公众号
media_url = {}   # 存储公众号的完整链接


def get_as_cp():  # 该函数主要是为了获取as和cp参数,程序参考今日头条中的加密js文件:home_4abea46.js
	zz = {}
	now = round(time.time())
	print(now) # 获取当前计算机时间
	e = hex(int(now)).upper()[2:] #hex()转换一个整数对象为16进制的字符串表示
	print('e:', e)
	a = hashlib.md5()  #hashlib.md5().hexdigest()创建hash对象并返回16进制结果
	print('a:', a)
	a.update(str(int(now)).encode('utf-8'))
	i = a.hexdigest().upper()
	print('i:', i)
	if len(e)!=8:
		zz = {'as':'479BB4B7254C150',
		'cp':'7E0AC8874BB0985'}
		return zz
	n = i[:5]
	a = i[-5:]
	r = ''
	s = ''
	for i in range(5):
		s= s+n[i]+e[i]
	for j in range(5):
		r = r+e[j+3]+a[j]
	zz ={
	'as':'A1'+s+e[-3:],
	'cp':e[0:3]+r+'E1'
	}
	print('zz:', zz)
	return zz


def getdata(url, headers, cookies):  # 解析网页函数
	r = requests.get(url, headers=headers, cookies=cookies)
	print(url)
	data = json.loads(r.text)
	return data


def savedata(title, s_url, source, media_url):  # 存储数据到文件
	# 存储数据到xlxs文件
	wb = Workbook()
	if not os.path.isdir(os.getcwd()+'/result'):   # 判断文件夹是否存在
		os.makedirs(os.getcwd()+'/result') # 新建存储文件夹
	filename = os.getcwd()+'/result/result-'+datetime.datetime.now().strftime('%Y-%m-%d-%H-%m')+'.xlsx' # 新建存储结果的excel文件
	ws = wb.active
	ws.title = 'data'   # 更改工作表的标题
	ws['A1'] = '标题'   # 对表格加入标题
	ws['B1'] = '新闻链接'
	ws['C1'] = '头条号'
	ws['D1'] = '头条号链接'
	for row in range(2, len(title)+2):   # 将数据写入表格
		_= ws.cell(column=1, row=row, value=title[row-2])
		_= ws.cell(column=2, row=row, value=s_url[row-2])
		_= ws.cell(column=3, row=row, value=source[row-2])
		_= ws.cell(column=4, row=row, value=media_url[source[row-2]])

	wb.save(filename=filename)  # 保存文件



def main(max_behot_time, title, source_url, s_url, source, media_url):   # 主函数
	for i in range(3):   # 此处的数字类似于你刷新新闻的次数,正常情况下刷新一次会出现10条新闻,但夜存在少于10条的情况;所以最后的结果并不一定是10的倍数
		ascp = get_as_cp()    # 获取as和cp参数的函数
		demo = getdata(start_url+max_behot_time+'&max_behot_time_tmp='+max_behot_time+'&tadrequire=true&as='+ascp['as']+'&cp='+ascp['cp'], headers, cookies)
		print(demo)
		# time.sleep(1)
		for j in range(len(demo['data'])):
			# print(demo['data'][j]['title'])
			if demo['data'][j]['title'] not in title:
				title.append(demo['data'][j]['title'])  # 获取新闻标题
				source_url.append(demo['data'][j]['source_url'])  # 获取新闻链接
				source.append(demo['data'][j]['source'])  # 获取发布新闻的公众号
			if demo['data'][j]['source'] not in media_url:
				media_url[demo['data'][j]['source']] = url+demo['data'][j]['media_url']  # 获取公众号链接
		print(max_behot_time)
		max_behot_time = str(demo['next']['max_behot_time'])  # 获取下一个链接的max_behot_time参数的值
		for index in range(len(title)):
			print('标题:', title[index])
			if 'https' not in source_url[index]:
				s_url.append(url+source_url[index])
				print('新闻链接:', url+source_url[index])
			else:
				print('新闻链接:', source_url[index])
				s_url.append(source_url[index])
				# print('源链接:', url+source_url[index])
			print('头条号:', source[index])
			print(len(title))   # 获取的新闻数量

if __name__ == '__main__':
	main(max_behot_time, title, source_url, s_url, source, media_url)
	savedata(title, s_url, source, media_url)

  简单百行代码搞定今日头条热点新闻爬取并存储到本地,同理也可以爬取其他频道的新闻;本次的爬取程序到此结束,下次从爬取的公众号对公众号下的新闻进行爬取,主要爬取公众号的粉丝量以及最近10条新闻的或图文的阅读量及评论数等数据;请期待...

最后送上程序运行的截图及数据存储的表格截图:

---------------------------------------------------------

欢迎大家留言交流,共同进步。

 

--结束END--

本文标题: python 简单爬取今日头条热点新闻(

本文链接: https://www.lsjlt.com/news/181142.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python 简单爬取今日头条热点新闻(
    今日头条如今在自媒体领域算是比较强大的存在,今天就带大家利用python爬去今日头条的热点新闻,理论上是可以做到无限爬取的; 在浏览器中打开今日头条的链接,选中左侧的热点,在浏览器开发者模式network下很快能找到一个‘category...
    99+
    2023-01-30
    头条 热点新闻 简单
  • Python小程序爬取今日新闻拿走就能用
    目录核心代码爬取标题界面代码软件编译核心代码 requests.get 下载html网页 bs4.BeautifulSoup 分析html内容 from requests imp...
    99+
    2024-04-02
  • python要怎么爬取今日头条街拍美图案
    python要怎么爬取今日头条街拍美图案,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。今天为大家介绍一个利用Python爬取今日头条街拍美图的案例,想到各位会喜...
    99+
    2023-06-02
  • 使用Ajax请求怎么爬取今日头条
    本篇文章给大家分享的是有关使用Ajax请求怎么爬取今日头条,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。代码如下:import requestsimport ...
    99+
    2023-06-08
  • Python怎么进行简单的百度新闻爬取
    Python怎么进行简单的百度新闻爬取,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。这个实战例子是构建一个大规模的异步新闻爬虫,但要分几步走,从简单到复杂,循序...
    99+
    2023-06-02
  • 用Python爬下今日头条所有美女,美滋
      有人可能会说:如果我学好了,我可以找一个高薪的工作。有人可能会说:我学习编程希望能够为社会做贡献(手动滑稽)有人可能会说:为了妹子!.....其实我们会发现妹子才是第一生产力呀!今天咱们就是爬取今日头条,你要问我为什...
    99+
    2023-01-30
    头条 爬下 今日
  • Python抓取今日头条街拍图片数据
    目录(1)抓取今日头条街拍图片(2)分析今日头条街拍图片结构(3)按功能不同编写不同方法组织代码(4)抓取20page今日头条街拍图片数据(1)抓取今日头条街拍图片 (2)分析今日...
    99+
    2024-04-02
  • 结合Python网络爬虫做一个今日新闻小程序
    核心代码 requests.get 下载html网页 bs4.BeautifulSoup 分析html内容 from requests import get from bs4 i...
    99+
    2024-04-02
  • 教你如何用Python爬虫获取今日头条上面三千美女图
    想问大家一个问题啊,大家学习Python爬虫的动力是什么呀?下面是我们有些同学的回答:1 .Python爬虫学好了,我可以找一个高薪的工作。2 .我学习编程希望能够为社会做贡献(手动滑稽)3 .为了姑娘!(很直白的回答哈!).....总结了...
    99+
    2023-06-02
  • 如何使用Python抓取今日头条街拍图片数据
    这篇文章主要介绍了如何使用Python抓取今日头条街拍图片数据,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。(1)抓取今日头条街拍图片(2)分析今日头条街拍图片结构keywo...
    99+
    2023-06-22
  • java spring+mybatis整合如何实现今日头条搞笑动态图片的爬取
    java spring+mybatis整合如何实现今日头条搞笑动态图片的爬取,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。java spring+mybatis整合实现爬虫之今...
    99+
    2023-06-19
  • 最新西瓜视频、今日头条视频地址解析获取API接口
    今天要给开发者们介绍的一个接口是Videoparse(https://www.videoparse.cn)提供的视频去水印解析接口,接口特点:Videoparse短视频解析接口支持:抖音、快手、小红书、西瓜视频、今日头条、微视、火山小视频、...
    99+
    2023-06-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作