本文主要讲,用户输入标签后,通过爬虫,可实现获取相关的新闻,将获取的新闻保存为.csv文件。

前期准备

首先导入需要的第三方库

import requests
import time
import random
import json
import pandas as pd

以‘爱国’标签为例,获取的网址为:https://www.toutiao.com/api/search/content/?aid=24&app_name=web_search&offset=0&format=json&keyword=%E7%88%B1%E5%9B%BD&autoload=true&count=20&en_qc=1&cur_tab=1&from=search_tab&pd=synthesis&timestamp=1569648697670】

我们可以发现中间有一个keyword,经验告诉我们,这个就是标签,我们需要改变的的也正是这个,同时我们也该注意到url最后面有一个 timestamp,这个是时间戳,为了避免长时间使用同一个时间戳,这里需要引入time模块,生成一个即时的时间戳。

代码如下:

# 输入标签名
keyword = input('请输入标签名称:')
# 生成时间戳
timestamp = round(time.time()*1000)
# 生成url
url = f'https://www.toutiao.com/api/search/content/?aid=24&app_name=web_search&offset=0&format=json&keyword={keyword}&autoload=true&count=20&en_qc=1&cur_tab=1&from=search_tab&pd=synthesis&timestamp={timestamp}'

headers的伪装

今日头条的反爬挺厉害的,如果headers中不传入cookie,是无法多次都返回我们需要的新闻内容的,而cookie的获取有简单的方式就是复制粘贴;即打开一个标签的文章,打开开发者工具,在headers中复制cookie,如图;

headers的伪装代码如下:

UserAgent_list = ['Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36','Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36']
Cookie = 'tt_webid=6741334664763835907; WEATHER_CITY=%E5%8C%97%E4%BA%AC; ' \'tt_webid=6741334664763835907; csrftoken=af5535d3c7e019b988ec0f93b7f1774d; ' \'s_v_web_id=9985dd97ccfd39b145674d0955a295a1; ' \'__tasessionId=pj925vib61569648686929'
headers = {'User-Agent': random.choices(UserAgent_list),  # 使用random模块中的choices()方法随机从列表中提取出一个内容'Cookie': Cookie}

请求页面和页面解析

'https://www.toutiao.com/api/search/content/?aid=24&app_name=web_search&offset=0&format=json&keyword=%E6%B3%95%E5%9B%BD&autoload=true&count=20&en_qc=1&cur_tab=1&from=search_tab&pd=synthesis&timestamp=1569650894434'

为例;

我们打开开发者工具点击左边第一个可以看到如下图面:

经过分析,我们可以发现新闻主要在字段'data'中:

需要注意的是:data中并非所有都是新闻,最后我发现当出现‘abstract’这个字段时,一定是新闻,这里可以借此加一个判断

点开data中的其中一个内容,如图:

而我们需要的提取的内容分别就是字段:abstract,articleurl,commentscount,datetime,read_count,title

代码实现:

response = requests.get(url, headers=headers)
response.encoding = 'utf-8'
news_json = json.loads(response.text)
news_data = news_json['data']
# 创建相关的列表来保存相关的内容
title_list = []
news_content_list = []
news_time_list = []
read_count_list = []
comment_count_list = []
news_url_list = []
news_keyword_list = []
# 遍历news_data,提取相关的内容
for news in news_data:# 加入一个判断条件,判断是否为新闻if 'abstract' in news.keys():# 标题title_list.append(news['title'])# 新闻内容news_content_list.append(news['abstract'])# 发布时间news_time_list.append(news['datetime'])# 阅读量read_count_list.append(news['read_count'])# 评论数comment_count_list.append(news['comment_count'])# 新闻链接news_url_list.append(news['article_url'])# 新闻关键字news_keyword_list.append(news['keyword'])
# 将获取的内容组成字典
news_info_dict = dict()
news_info_dict['title'] = title_list
news_info_dict['content'] = news_content_list
news_info_dict['read_count'] = read_count_list
news_info_dict['news_time'] = news_time_list
news_info_dict['comment_count'] = comment_count_list
news_info_dict['news_url'] = news_url_list
news_info_dict['news_keyword'] = news_keyword_list

新闻内容的保存

使用pandas库的to_csv来保存成.csv文件

代码如下:

news_DF = pd.DataFrame(news_info_dict)
news_DF.to_csv(self.keyword+'标签的新闻内容.csv', mode='a', encoding='utf_8_sig')  # 如果使用‘utf-8’编码,还出现中文乱码,建议使用'utf_8_sig'
print('文件保存成功!!')

完整代码

上面的是按顺序执行下来的,而完整代码我是用面向对象的编程方式(即使用类)

完整代码如下:

# 导入所需的库
import requests
import json
import pandas as pd
import time
import randomclass toutiao_spider():def __init__(self, keyword):# 标签名self.keyword = keyword# 生成一个13位的时间戳self.timestamp = round(time.time()*1000)def get_headers(self):"""headers伪装:User-Agent和Cookie:return: headers"""UserAgent_list = ['Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36','Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36']Cookie = 'tt_webid=6741334664763835907; WEATHER_CITY=%E5%8C%97%E4%BA%AC; ' \'tt_webid=6741334664763835907; csrftoken=af5535d3c7e019b988ec0f93b7f1774d; ' \'s_v_web_id=9985dd97ccfd39b145674d0955a295a1; ' \'__tasessionId=pj925vib61569648686929'headers = {'User-Agent': random.choices(UserAgent_list)[0],  # 使用random模块中的choices()方法随机从列表中提取出一个内容'Cookie': Cookie}return headersdef get_news_info(self, json_data):"""传入json格式的内容,对内容进行提取:分别提取新闻的标题及内容,发布日期,阅读量,评论数,新闻url,新闻所属的关键字:param json_data: json格式的文本:return: news_info_dict"""# 将json格式转化为字典格式dict_data = json.loads(json_data, encoding='utf-8')# 新闻的主要内容都在dict_data中的data字段中news_data = dict_data['data']# 创建相关的列表来保存相关的内容title_list = []news_content_list = []news_time_list = []read_count_list = []comment_count_list = []news_url_list = []news_keyword_list = []# 遍历news_data,提取相关的内容for news in news_data:# 加入一个判断条件,判断是否为新闻if 'abstract' in news.keys():# 标题title_list.append(news['title'])# 新闻内容news_content_list.append(news['abstract'])# 发布时间news_time_list.append(news['datetime'])# 阅读量read_count_list.append(news['read_count'])# 评论数comment_count_list.append(news['comment_count'])# 新闻链接news_url_list.append(news['article_url'])# 新闻关键字news_keyword_list.append(news['keyword'])# 将获取的内容组成字典news_info_dict = dict()news_info_dict['title'] = title_listnews_info_dict['content'] = news_content_listnews_info_dict['read_count'] = read_count_listnews_info_dict['news_time'] = news_time_listnews_info_dict['comment_count'] = comment_count_listnews_info_dict['news_url'] = news_url_listnews_info_dict['news_keyword'] = news_keyword_listreturn news_info_dictdef save_to_csv(self, news_info_dict):"""使用pandas中的to_csv()将新闻内容保存为.csv 文件:param news_info_dict: 新闻内容字典:return:"""news_DF = pd.DataFrame(news_info_dict)news_DF.to_csv(self.keyword+'标签的新闻内容.csv', mode='a', encoding='utf_8_sig')  # 如果使用‘utf-8’编码,还出现中文乱码,建议使用'utf_8_sig'print('文件保存成功!!')def get_response(self):"""请求页面:return:json_data"""# 拼接urlurl = f'https://www.toutiao.com/api/search/content/?aid=24&app_name=web_search&offset=0&format=json&keyword={self.keyword}&autoload=true&count=20&en_qc=1&cur_tab=1&from=search_tab&pd=synthesis&timestamp={self.timestamp}'# 获取headersheaders = self.get_headers()# 请求页面response = requests.get(url=url, headers=headers)if response.status_code == 200:print('请求成功!!')else:print('请求失败,正在尝试发起请求!!')self.get_response()json_data = response.textreturn json_datadef run(self):"""主运行函数:return:"""json_data = self.get_response()news_info_dict = self.get_news_info(json_data)self.save_to_csv(news_info_dict)if __name__ == '__main__':spider = toutiao_spider(keyword='爱国')spider.run()

以上就是本期的内容,本文如果存在不足和错误欢迎指出,谢谢大家的阅读!!!

今日头条标签新闻的爬取相关推荐

  1. python爬取今日头条的文章_Python3爬取今日头条有关《人民的名义》文章

    Python3爬取今日头条有关<人民的名义>文章 最近一直在看Python的基础语法知识,五一假期手痒痒想练练,正好<人民的名义>刚结束,于是决定扒一下头条上面的人名的名义文章 ...

  2. 今日头条街拍图片爬取

    其中遇到的问题和一些新知识: 1. 注意页面请求参数:(会改变) 即Query String Parameters 例: 今日头条里街拍综合的数据为 'offset': 0, 'format': 'j ...

  3. python爬取今日头条_使用python-aiohttp爬取今日头条

    原博文 2018-01-24 22:01 − http://blog.csdn.net/u011475134/article/details/70198533 原出处 在上一篇文章<使用pyth ...

  4. Python3从零开始爬取今日头条的新闻【五、解析头条视频真实播放地址并自动下载】

    Python3从零开始爬取今日头条的新闻[一.开发环境搭建] Python3从零开始爬取今日头条的新闻[二.首页热点新闻抓取] Python3从零开始爬取今日头条的新闻[三.滚动到底自动加载] Pyt ...

  5. Python3从零开始爬取今日头条的新闻【一、开发环境搭建】

    Python3从零开始爬取今日头条的新闻[一.开发环境搭建] Python3从零开始爬取今日头条的新闻[二.首页热点新闻抓取] Python3从零开始爬取今日头条的新闻[三.滚动到底自动加载] Pyt ...

  6. python编程100例头条-python 简单爬取今日头条热点新闻(一)

    今日头条如今在自媒体领域算是比较强大的存在,今天就带大家利用python爬去今日头条的热点新闻,理论上是可以做到无限爬取的: 在浏览器中打开今日头条的链接,选中左侧的热点,在浏览器开发者模式netwo ...

  7. python爬虫今日头条_python 简单爬取今日头条热点新闻(

    今日头条如今在自媒体领域算是比较强大的存在,今天就带大家利用python爬去今日头条的热点新闻,理论上是可以做到无限爬取的: 在浏览器中打开今日头条的链接,选中左侧的热点,在浏览器开发者模式netwo ...

  8. python爬虫爬取今日头条_python 简单爬取今日头条热点新闻(一)

    今日头条如今在自媒体领域算是比较强大的存在,今天就带大家利用python爬去今日头条的热点新闻,理论上是可以做到无限爬取的: 在浏览器中打开今日头条的链接,选中左侧的热点,在浏览器开发者模式netwo ...

  9. python 头条 上传_python 简单爬取今日头条热点新闻(一)

    今日头条如今在自媒体领域算是比较强大的存在,今天就带大家利用python爬去今日头条的热点新闻,理论上是可以做到无限爬取的: 在浏览器中打开今日头条的链接,选中左侧的热点,在浏览器开发者模式netwo ...

最新文章

  1. php get memory,PHP memory_get_usage 和 memory_get_peak_usage获取内存的区别
  2. python 搭配 及目录结构
  3. WINCE系统启动时是否clean boot
  4. Maven pom.xml配置详解(三)
  5. 揭开知识库问答KB-QA的面纱3·信息抽取篇
  6. 《使用云计算和大数据进行性能测试》
  7. SAP UI5 webIDE good build and bad build
  8. linux中流设备_[快速上手Linux设备驱动]之块设备驱动流程详解一
  9. 转载:什么是良好的Verilog代码风格?(作者KellenWang)
  10. [转]最牛MSN签名
  11. maya显示已安装_安装cad2010显示已安装怎么办?峰哥教你怎么解决
  12. 北京16个山水美景| 清明小长假走起吧!
  13. 叠积木(加权并查集)
  14. Python: 进行one-hot编码
  15. PLC振荡电路——控制灯闪烁
  16. 电子邮件格式是什么,你知道电子邮件在哪里找吗
  17. 折线(Polyline)、多边形(Polygon)
  18. 你的硬盘有多快?,教你提升硬盘/NAS读写性能
  19. 北大SQL数据库视频教程
  20. css3帧(雪碧图)动画实现

热门文章

  1. MATLAB读取mat文件,遍历里面所有数据
  2. 青书学堂c语言作业,青书学堂: (单选题) C语言中非空的基本数据类型包括____(本题2.0分)...
  3. Netgear wndr3700v2 路由器刷OpenWrt打造全能服务器(六)pptpd服务
  4. 谷歌Colab 免费运行pytorch
  5. 盘点5个在网上赚零花钱的小项目,傻瓜操作
  6. [娱乐向] - 如何自定义一个微信红包封面
  7. Vue 3.0 公开代码之后……
  8. 谷歌浏览器运行缓慢_为什么新的Google地图在我的计算机上运行缓慢得难以忍受?
  9. 疯狂填字600期游戏打包版发布
  10. ArcEngine实现MDB转GDB