Python爬取今日头条热门文章

前言

今日头条文章收益是没有任何门槛,只要是你发布文章,每篇文章的阅读量超过1000就能有收益,阅读量越多收益越高。于是乎我就有了个大胆的想法。何不利用Python爬虫,爬取热门文章,然后完成自动化发布文章呢?这不就完成了我多年以来躺着赚钱的愿望了嘛。说干就干,于是乎就有了下面的操作。我的思路是这样的,因为娱乐版块的文章更容易上热门,于是我就以娱乐版块为突破口。

 

1. 获取今日头条文章列表接口

找到了获取文章列表的接口,今日头条的接口做了反爬虫处理,每次请求接口时都需要带上一组加密字符,否则接口报错,于是我通过百度,发现今日头条的加密字符串生成来自于acrawler.js文件,我将js文件下载到本地按照网友的方法发现代码跑起来了加密字符串生成了,然后我加成功拼接url成功获取到了文章列表。

 

将acrawler.js下载到本地,引入到自己的html文件中,并执行代码 

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>getSig</title><script src="./acrawler.js"></script>
</head>
<body><p id="sigUrl"></p>
</body>
<script>var channel = "3189398972" // 娱乐// var channel = "3189398999" // 科技function getSSSS(){var time = new Date();var str = "https://www.toutiao.com/api/pc/list/feed?channel_id="+channel+"&max_behot_time="+time.getTime()+"&offset=0&category=pc_profile_channel&client_extra_params=%7B%22short_video_item%22:%22filter%22%7D&aid=24&app_name=toutiao_web"var sig = window.byted_acrawler.sign({url:str})var url = str+"&_signature="+sig;document.getElementById("sigUrl").innerText = urlconsole.log(url);}getSSSS();setInterval(function(){getSSSS();},30000)</script>
</html>

 html文件运行结果:

2. 使用selenium获取js脚本生成的url

Selenium是一个用于Web应用程序自动化测试工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作浏览器一样。

因为js运行依靠window浏览器对象,所以Python无法直接运行js代码获取加密之后的url,这里我使用selenium运行浏览器,打开生成url的html文件,获取加密处理后的url

pip安装selenium

pip install selenium

 主要代码:

# 浏览器自动化工具
from selenium import webdriver
from selenium.webdriver.common.by import By# 创建一个浏览器实例
browser = webdriver.Firefox()# 获取请求地址
browser.get("file:///E:/studyproject/python/toutiao/getSig.html")# 自动化获取js代码计算的sig数据值
sigTag = browser.find_element(By.ID,"sigUrl")
url = sigTag.text

通过上面代码获取到请求的url了

3. 使用requests根据列表url获取文章列表数据

Requests是Python的一个第三方库,用于发送HTTP请求。Requests库可用于爬取数据、与API交互、测试Web服务等。Requests库的作用主要是向Web服务器发送请求,并获取响应结果。发送的请求可以是GET、POST、PUT、DELETE、HEAD、OPTIONS等HTTP方法,同时还可以设置请求参数、请求头、请求体、代理、超时时间等。获取的响应结果包含HTTP状态码、HTTP响应头、HTTP响应内容等信息,同时支持自动解析JSON格式的响应内容。

使用pip安装requests,请求刚才获取的url列表地址,设置请求头的cookie,否则每次请求连接返回的数据都是相同的

pip安装requests工具包

pip install requests

主要代码: 

# 网络请求工具
import requestsheaders = {# 设置User-Agent,模拟浏览器发送请求'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36',# 设置Cookie,用于身份验证或其他需要的信息'Cookie': '__ac_signature=_02B4Z6wo00f01Lz3yHgAAIDB3.0IExdN.9i818zAAEpR33;tt_webid=7309719685489198604;ttcid=fb73866ceb7a44cdb848344abfc11b6364;s_v_web_id=verify_lpur8vrr_aKDsfWBn_AThk_4UlU_8RpK_Ci9lGCzIBKbb; _ga=GA1.1.1051493470.1701926754; local_city_cache=%E4%B8%B4%E6%B2%82; csrftoken=4561fa578aa7c7bc7d3ac8f87ac7fad1; __feed_out_channel_key=entertainment; passport_csrf_token=a296ea89de4f632e00534cd16812d593; passport_csrf_token_default=a296ea89de4f632e00534cd16812d593; msToken=Lhx7DAYTtQJiiCVIVmYNqtpQkUVKq8RzEzhUZAslgKw_w5gJ_vSlmCJKsQoQUyXXoJzHhluRQFpfceUoT2n2IoACypVJ-aD7RCuXC7iI; tt_scid=0lfkb7lPohYDsWmjDuFAe7L3oLDo0KsbKzlhKzl1CQ2im2TQypCzPCKr.jkBHxexd641; ttwid=1%7CVPO9aK7JwsvyYUFWA3MR5i_pw1b4nic0TD5-jp-zjVc%7C1702450449%7C067c9bd8be4c0a21dc4e60bc225ee29072184eeb24503d5d6cc26b9554d20d26; _ga_QEHZPBE5HH=GS1.1.1702455638.13.0.1702455638.0.0.0.0.0'}# 请求接口获取json数据
res = requests.get(url,headers=headers)

上述代码中User-Agent和Cookit直接在浏览器请求接口中获取就行。

4. 使用json工具包,解析文章列数据

python可以通过json库,解析字符串或文件中的内容转为json字符串或python的字典或列表

获取返回的json数据,解析json数据,保留阅读量、点赞量等较高的文章信息。

# JSON解析工具
import json# 请求接口获取json数据
res = requests.get(url,headers=headers)
json_obj = json.loads(res.text)# 通过遍历每条数据,过滤热门文章
for item in json_obj['data']:# 计算文章分享数量shareCount = item['share_info']['share_type']['pyq']+item['share_info']['share_type']['qq']+item['share_info']['share_type']['qzone']+item['share_info']['share_type']['wx']# 判断文章路径是否是站内文章路径if re.match(matchTemplate,item['article_url']):# 多条件判断是否是较新的热门文章if item['read_count'] >= 3000:

5. 使用pymysql工具包,将爬取的数据保存到MySQL数据库 

pymysql是从Python连接到MySQL数据库服务器的接口, 简单理解就是,Pymysql是python操作mysql数据库的三方模块。就是可以理解为可以在python中连接数据库写MySQL命令,实现的 MySQL 客户端操作库,支持事务、存储过程、批量执行等。 

pip安装pymysql

pip install pymysql

主要代码:

# 数据库链接工具
import pymysql#链接MySQL
mysqlCon = pymysql.connect(host="127.0.0.1",port=3306,user="root",password="123456",database="toutiao"
)# 通过遍历每条数据,过滤热门文章for item in json_obj['data']:# 计算文章分享数量shareCount = item['share_info']['share_type']['pyq']+item['share_info']['share_type']['qq']+item['share_info']['share_type']['qzone']+item['share_info']['share_type']['wx']imageList = ""# 判断文章路径是否是站内文章路径if re.match(matchTemplate,item['article_url']):# 多条件判断是否是较新的热门文章if item['read_count'] >= 3000:# 创建游标对象cursor = mysqlCon.cursor()# 执行 SQL 查询语句cursor.execute("select * from happy where item_id ="+item['item_id'])# 获取查询结果result = cursor.fetchall()# 判断是否已经插入if len(result) == 0:# 将热门文章保存到数据库sql = "insert into happy (id,item_id,title,abstract,publish_time,like_count,read_count,comment_count,share_count,image_list,article_url,gather_time,transport_time,source) values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"values = (None,item['item_id'],item['title'],item['Abstract'],item['publish_time'],item['like_count'],item['read_count'],item['comment_count'],shareCount,imageList,item['article_url'],time(),0,"toutiao")cursor.execute(sql,values)mysqlCon.commit()else:print("已经存在")

6. 根据数据库爬取的热门文章列表,爬取文章文本和图片信息

今日头条对做了反爬虫处理,直接使用requests请求网页无法获取文章内容,所以只能使用selenium来模拟浏览器浏览网页内容通过上面获取的热门文章id,拼接 url地址从而获取文章内容

主要代码:

# 浏览器自动化工具
from selenium import webdriver
from selenium.webdriver.common.by import By# MySQL数据库链接工具
import pymysql
# 文件操作类
import os
# 时间类
from time import sleepfrom docx import Document
import pypandoc#链接MySQL
mysqlCon = pymysql.connect(host="127.0.0.1",port=3306,user="root",password="123456",database="toutiao"
)while True:cursor = mysqlCon.cursor()# 执行 SQL 查询语句cursor.execute("select id,item_id,article_url,title from happy where state = 0 order by read_count asc limit 0,1")# 获取查询结果result = cursor.fetchall()sql = "update happy set state = 1 where id = %s"id = result[0][0]cursor.execute(sql,id)mysqlCon.commit()articleId = result[0][1]articleTitle = result[0][3]# articleId = "7279996073686123068"# 通过查询列表获取未发布的热门文章信息,根据获取的文章URL 打开URL链接地址# articleId = "7291869777788666407"# 创建一个浏览器实例browser = webdriver.Firefox()# # 获取请求地址browser.get("https://toutiao.com/group/"+articleId)sleep(30)# 根据元素名称获取元素内容textContainer = browser.find_element(By.CLASS_NAME,"syl-article-base")articleHtml = textContainer.get_attribute("innerHTML")# 根据解析的HTML内容,获取文章文本信息和图片信息,并将文本信息和图片保存到Word文档中# file = open("E:\\studyproject\\python\\toutiao\data\\"+articleId+"\\"+articleId+".html", "r",encoding='utf-8')os.mkdir("E:\\studyproject\\python\\toutiao\data\\happy\\"+articleId)output = pypandoc.convert_text(articleHtml, 'docx','html',outputfile="E:\\studyproject\\python\\toutiao\data\\happy\\"+articleId+"\\"+articleTitle+".docx")sleep(30)browser.quit()

 上述代码实现了,打开浏览器,获取浏览器标签和标签内内容,并将内容保存到word文档中。至此热门文章的爬取就实现了。

之后想用selenium实现自动登录,发布文章,这个时候我直接在头条平台中发布了我爬取的文章,两篇文章阅读量都在几K, 但是好景不长,文章是上午发布的,号是下午封的!!!nainai的,抄袭违规,因此只能暂时中断,下一步的计划是利用ChatGTP改写爬取的文章内容,然后再发布。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2661694.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

24年软件测试的晋升之路与能力要求,“我“该何去何从?

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、软件测试人员的…

1.DQL查询数据(超重点)以及distinct(去重)

DQL(Data Query Language:数据查询语言) 1.所有查询操作都用 SELECT 2.无论是简单的查询还是复杂的查询它都能做 3.数据库中最核心的语言&#xff0c;最重要的语句 4.使用频率最高的语句 语法&#xff1a; SELECT 字段1&#xff0c;字段2&#xff0c;……FROM 表 有时候…

CISP培训强化研发团队,确保金融科技发展安全无忧

​某金融科技公司是行业领先的平台服务商&#xff0c;凭借其在区块链、物联网、云计算、大数据和人工智能等尖端技术的卓越研发实力&#xff0c;致力于将前沿技术融入金融业务模式和应用场景。公司不断努力为客户提供一个“科技金融行业客户”的综合服务平台&#xff0c;从而实…

引领创业新风潮,花为缘享奢二手奢侈品买卖如何突出重围脱颖而出

数据显示&#xff0c;中国消费者的奢侈品消费金额占全球的份额从2000年的1%左右提升到2017年的33%。奢侈品消费的主战场仍是品牌发源地的欧洲和美国&#xff0c;中国消费者奢侈品消费规模全球第一。奢侈品逆势增长与持续涨价这件事&#xff0c;无疑预示着二级奢侈品转售市场将迎…

大数据引爆点:数据可视化的飞速发展

在信息时代&#xff0c;数据如潮水般涌入&#xff0c;企业和个人面临的挑战前所未有。而在这个数据的浩瀚海洋中&#xff0c;数据可视化如一道明亮的灯塔&#xff0c;引领着信息时代的航行者。近几年&#xff0c;数据可视化以其直观、生动的特性&#xff0c;迅速成为了信息表达…

2024年U.S.News全美最佳大学排名公布(附top100榜单)

9月18日&#xff0c;《美国新闻与世界报道》正式发布了最新的2024全美最佳综合大学排名。知识人网小编整理并附上top100的学校榜单&#xff0c;以供访问学者、博士后及联合培养博士们参考。 2024 US News 排名机制调整 U.S. News的排名综合考虑了包括录取率、师生比例、学生标…

嵌入式SOC之通用图像处理之OSD文字信息叠加的相关实践记录

机缘巧合 机缘巧合下, 在爱芯元智的xx开发板下进行sdk的开发.由于开发板目前我拿到是当前最新的一版(估计是样品)&#xff0c;暂不公开开发板具体型号信息.以下简称板子 .很多优秀的芯片厂商,都会提供与开发板配套的完善的软件以及完善的技术支持(FAE)&#xff0c;突然觉得爱芯…

win10安装ffmpeg

1 ffmpeg官网下载 官网地址&#xff1a;https://ffmpeg.org/ ffmpeg可执行程序下载地址&#xff1a;https://www.gyan.dev/ffmpeg/builds/ ffmpeg官网文档&#xff1a;https://ffmpeg.org/documentation.html 选择对应的版本点解下载可执行程序包&#xff0c;比如6.1版本的…

Linux操作系统(文件系统管理fdisk)

操作系统的两种启动模式Legacy BIOS 和 UEFI Legacy BIOS&#xff08;Basic Input/Output System,基本输入/输出系统&#xff09; 在开机时需要自检&#xff0c;启动过程较复杂。且传统的BIOS无法识别GPT&#xff08;GUID Partition Table&#xff09;分区表&#xff0c;只能识…

Windows上ModbusTCP模拟Master与Slave工具的使用

场景 Modbus Slave 与 Modbus Poll主从设备模拟软件与Configure Virtual Serial串口模拟软件使用&#xff1a; Modebus Slave 与 Modbus Poll主从设备模拟软件与Configure Virtual Serial串口模拟软件使用_modbus poll激活-CSDN博客 数据对接协议为Modbus TCP,本地开发需要使…

2023教程发布最后一个教程 | R语言绘图汇总

2023年总结 2023年即将结束&#xff0c;我们即将迎来2024年。2023年&#xff0c;我们做了什么呢&#xff1f;&#xff1f;这个是个值得深思的问题…? 12月份是个快乐且痛苦时间节点。前一段时间&#xff0c;单位需要提交2023年工作总结&#xff0c;真的是憋了好久才可以下笔…

众和策略:人工智能风起云涌 算力基建支撑加速前进

2023年&#xff0c;人工智能技术完结质的飞跃。通过生成式AI&#xff08;AIGC&#xff09;技术&#xff0c;人们可用自然语言与机器进行便捷交互&#xff0c;并将海量的数据通过训练、推理&#xff0c;快速转化为出产力&#xff0c;发生实践商业价值。 AI技术加快向各行各业渗…

HarmonyOS自学-Day4(TodoList案例)

目录 文章声明⭐⭐⭐让我们开始今天的学习吧&#xff01;TodoList小案例 文章声明⭐⭐⭐ 该文章为我&#xff08;有编程语言基础&#xff0c;非编程小白&#xff09;的 HarmonyOS自学笔记&#xff0c;此类文章笔记我会默认大家都学过前端相关的知识知识来源为 HarmonyOS官方文…

LTPI协议的理解——4、LTPI链路初始化以及运行

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 LTPI协议的理解——4、LTPI链路初始化以及运行 前言状态图Link TrainingLink DetectLink SpeedLink Training Example Link ConfigurationAdvertiseConfigure & AcceptLi…

什么是PD快充诱骗芯片?它的原理是什么?

PD快充诱骗芯片&#xff0c;顾名思义&#xff0c;就是通过LDR6328Q PD取电芯片把pd适配器的电压给诱骗出来固定给后端设备供电。 PD诱骗芯片是受电端的一种PD协议芯片&#xff0c;它内置了PD通讯模块&#xff0c;通过与供电端&#xff08;如PD充电器&#xff09;的PD协议芯片握…

微信小程序运行机制分析

setData渲染机制 Native就是微信客户端&#xff0c;逻辑层JsCore&#xff08;js文件&#xff09;通过setdata把数据送到渲染层Webview&#xff08;小程序页面&#xff0c;wxml文件&#xff09;&#xff0c;渲染层接收到数据后就会改变对应的元素值。用户在小程序页面进行操作可…

Element UI之el-tabs的样式修改字体颜色、下划线、选中/未选中

目录 默认样式 修改默认字体颜色&#xff1a; 修改鼠标悬浮/选中字体颜色&#xff1a; 去掉长分割线并修改下划线颜色 完整代码 默认样式 注意事项&#xff1a;一定要在 <style scoped>不然修改的样式不会覆盖生效 修改默认字体颜色&#xff1a; ::v-deep .el-tabs__…

Fiddler 抓包工具的安装与使用

今天分享Fiddler 抓包工具的安装与使用&#xff0c;基于HTTP应用层协议的抓包工具。 一、下载安装 1、下载地址&#xff1a; The Ultimate Web Debugging Tool - Download Fiddler Everywhere | Telerik 选择相应类型&#xff1a; 2、下载完成 3、安装 傻瓜式安装&#xf…

Weblogic反序列化远程命令执行(CVE-2019-2725)

漏洞描述&#xff1a; CVE-2019-2725是一个Oracle weblogic反序列化远程命令执行漏洞&#xff0c;这个漏洞依旧是根据weblogic的xmldecoder反序列化漏洞&#xff0c;通过针对Oracle官网历年来的补丁构造payload来绕过。 复现过程&#xff1a; 1.访问ip&#xff1a;port 2.可…

proE各版本安装指南

下载链接 https://pan.baidu.com/s/1BSaJxvPPGeIa4YKm7xk57g?pwd0531 1.鼠标右击【Proe5.0M280(64bit)】压缩包&#xff08;win11及以上系统需先点击“显示更多选项”&#xff09;选择【解压到 Proe5.0M280(64bit)】&#xff08;解压的路径中不能有中文&#xff09;。 2.打开…