python指定爬取新浪新闻
目录
- 前言
- xpath工具和requests
- 步骤
- 爬虫的四大步骤
- 思路
- 代码
- 效果
- 最终效果
- 总结
前言
又是一个宁静的晚上,看到同学们聊的新闻如此的开心,有说有笑的,我仿佛像个空气一样找不到话题,只能默默的看着他们聊天,然后一起笑,一起害怕,因为我是一个不怎么看新闻的人,所以他们说什么我都不知道啊!!!,所以我决定要爬取新闻然后可以全部看完,这样就能和我的朋友有说有笑,不用愁眉苦脸的看着他们啦!(好多四字成语,语文老师欣慰的点了点头…)
xpath工具和requests
本代码所用的工具就着2个,比较简单,不是很复杂,就是清洗数据有点麻烦,想了解xpath和下载xpath的可以点开此链接下载:https://blog.csdn.net/weixin_45859193/article/details/107064009
(此链接还有一个简单的实战操作,可以练手掌握)
步骤
其实这个想法之前就有想过,也尝试了,不过那时,我比较菜,也就知道抓包,js数据和用xpath工具解析数据,所以导致那时我用requests是什么获取不到我想要的数据的,最后在不断努力的抓包的过程中和查找源代码的过程中,我看到了这个数据
仔细观察可以看出这个有点像python里的字典啊,所以好办了,可以用requests解析数据看看是怎么样
(最后果然发现是可以转换为字典的,只要清洗一下数据就ok啦!)
爬虫的四大步骤
1.获取url
2.发送请求
3.解析数据,并清洗数据
4.保存数据
不管是什么网页都离不开的四大步骤,所以我们围绕着这四步走!
所以我们可以一步一步的上代码来看看是不是这样的!
思路
第一步获取url地址
#这是第一层的url
url='http://ent.sina.com.cn/hotnews/ent/Daily/'
第二步发送请求
#模拟浏览器
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.69 Safari/537.36'}
#发送请求
response=requests.get(url,headers=headers).content.decode()
第三步解析数据,并清洗数据
#解析成xpath能识别数据
html=etree.HTML(response)
#获取php链接,清洗数据
url_list=html.xpath('//script/@src')
url_link=url_list[1]
#获取到了链接
url_link='http:'+url_link
#获取到了新链接是不是还要继续按照上面的四大步骤去走,这里就不详解,都是一样的
response=requests.get(url_link,headers=headers).content.decode()
# #清洗数据
response=response.split('[')[-1]
response=response.split(']',-1)[0]
#转型
response=eval(response)
第四步保存清洗后的数据
#文件名
file_name='娱乐新闻.txt'
for req in response:#防止报错try:# 标题data = req['title']#这里不要组图的标题,没有内容,是图片,我们要的是新闻if re.findall('(.*?):', req['title']) == ['组图']or re.findall('(.*?):', req['title']) == ['组图']:continue#拼合,清洗数据,原谅我不会正则link = req['url'].replace('\\', '//')link = link.split('', 1)#这是我们想要的链接link = link[0] + link[1]res = requests.get(link, headers=headers).content.decode()html = etree.HTML(res)#判断链接后缀有没有/有的话要用另一个xpath工具来获取if link.split('//',-1)[-1]== '/':#清洗文本数据text='\n'.join(html.xpath('//div[@id="cont_0"]//p/text()')).strip('\n').replace('\u3000',' ')else:text='\n'.join(html.xpath('//div[@class="article"]//p//text()')).strip('\n').replace('\u3000',' ')#保存数据with open(file_name,'a+',encoding='utf-8') as f:# 标题写入f.write('------------'+''.join(data)+'------------\n')#正文写入f.write(text+'\n\n')#换行print(''.join(data)+'--提取成功')except:pass
是不是按照这四步走,发现其实并不是很难!
代码
import requests
from lxml import etree
from urllib.request import urlretrieve
import re
import json
#url='http:'+'//top.ent.sina.com.cn/ws/GetTopDataList.php?top_type=day&top_cat=ent_suda&top_time=20200802&top_show_num=20&top_order=DESC&js_var=all_1_data'
#第一层url,用来获取php的链接
url='http://ent.sina.com.cn/hotnews/ent/Daily/'
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.69 Safari/537.36'}
name_data=input('请问您想要的数据是什么数据(默认娱乐新闻)\n0.默认 1.其他')
if name_data == '1':url_1=input('请输入你想获取其他新闻的url')url=url_1
response=requests.get(url,headers=headers).content.decode()
html=etree.HTML(response)
#获取php链接,清洗数据
url_list=html.xpath('//script/@src')
url_link=url_list[1]
#获取到了链接
if name_data !='1':url_link='http:'+url_linkresponse=requests.get(url_link,headers=headers).content.decode()# #清洗数据,本人不太会正则= =
response=response.split('[')[-1]
response=response.split(']',-1)[0]
#转型
response=eval(response)
#定义文件名
file_name='娱乐新闻.txt'
for req in response:try:# 标题data = req['title']#这里不要组图的标题,没有内容,是图片,我们要的是新闻if re.findall('(.*?):', req['title']) == ['组图']or re.findall('(.*?):', req['title']) == ['组图']:continue#拼合,清洗数据,原谅我不会正则link = req['url'].replace('\\', '//')link = link.split('', 1)#这是我们想要的链接link = link[0] + link[1]res = requests.get(link, headers=headers).content.decode()html = etree.HTML(res)#判断链接后缀有没有/有的话要用另一个xpath工具来获取if link.split('//',-1)[-1]== '/':#清洗文本数据text='\n'.join(html.xpath('//div[@id="cont_0"]//p/text()')).strip('\n').replace('\u3000',' ')else:text='\n'.join(html.xpath('//div[@class="article"]//p//text()')).strip('\n').replace('\u3000',' ')#保存数据with open(file_name,'a+',encoding='utf-8') as f:# 标题写入f.write('------------'+''.join(data)+'------------\n')#正文写入f.write(text+'\n\n')#换行print(''.join(data)+'--提取成功')except:pass
效果
注:我爬取的是娱乐新闻,如果想爬其他的可以更改第一层的url地址(亲测有效的不过,只是在这些地方测试过,比如,其他的地方没试过)
其他地方没试过,如果有更好的建议,欢迎大佬指点改进
最终效果
其他效果
默认效果
文本效果
总结
不忘初心,方得始终!
温馨提示:大家尽量不要熬夜啊,身体要紧!!
python指定爬取新浪新闻相关推荐
- Python爬虫爬取新浪新闻内容
首先感谢丘祐玮老师在网易云课堂的Python网络爬虫实战课程,接下来也都是根据课程内容而写.一来算是自己的学习笔记,二来分享给大家参考之用. 课程视频大概是在16年11月录制的,现在是18年2月.其中 ...
- 从入门到入土:Python爬虫学习|实例练手|爬取新浪新闻搜索指定内容|Xpath定位标签爬取|代码注释详解
此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...
- python爬取新浪新闻
最近公司项目比较少,楼主闲了好长时间了,作为一个刚毕业几个月的新人,心里很烦躁,只能自己找点新东西去学了.看到周围好多人都接触了爬虫,再加上楼主最近沉迷吴宣仪不可自拔,每天投票投票,投票的同时需要监控 ...
- 网络爬虫-----python爬取新浪新闻
思路:先爬取首页,然后通过正则筛选出所有文章url,然后通过循环分别爬取这些url到本地 #python新闻爬虫实战 import urllib.request import re url = 'ht ...
- python爬虫-使用BeautifulSoup爬取新浪新闻标题
** python爬虫-使用BeautifulSoup爬取新浪新闻标题 ** 最近在学习爬虫的技巧,首先学习的是较为简单的BeautifulSoup,应用于新浪新闻上. import requests ...
- 使用python网络爬虫爬取新浪新闻(一)
使用python网络爬虫爬取新浪新闻 第一次写博客,感觉有点不太习惯!不知道怎么突然就想学学爬虫了,然后就用了一天的时间,跟着教程写了这个爬虫,!不说废话了,我将我从教程上学习的东西整个写下来吧,从头 ...
- java实现爬取新浪新闻指定天数(一段时间)的头条新闻
目标:java实现爬取新浪新闻指定天数(一段时间)的头条新闻 需要导入jar包:fastjson和Jsoup. IDEA导入jar包办法:Intellij IDEA 添加jar包的三种方式 思路: 找 ...
- python爬虫scrapy爬取新闻标题及链接_18Python爬虫---CrawlSpider自动爬取新浪新闻网页标题和链接...
一.爬取新浪新闻思路 1.创建scrapy项目 2.分析新浪新闻网站静态页面代码 3.编写对应的xpath公式 4.写代码 二.项目代码 步骤1.创建scrapy项目 scrapy startproj ...
- Python网络爬虫爬取新浪新闻
笔者最近由于需要研究互联网新闻,于是基于邱老师的网络爬虫实战,写了一个爬取新浪新闻的爬虫,爬取的信息有: 新闻标题 来源url 发布时间 正文 编辑者 与邱老师的爬虫相比有以下几点不同: 没有爬取新闻 ...
最新文章
- 判断是否移动端设备的JS代码,超短,百度都用它
- Visual Paradigm 教程[UML]:如何使用刻板印象和标记值?(下)
- 前Oracle首席工程师怒喷:MySQL 是“超烂的数据库”,建议考虑 PostgreSQL
- Windows核心编程_判断是否管理员权限运行
- ajax存储表单数据,使用ajax json将表单数据存储到数据库php
- RocketMQ(十四)RocketMQ消息重试机制
- qcc300x笔记之固件升级(六)
- Win7平台上通过QQ查询对方IP地址
- Appium+python自动化(二十一)- 让猴子按你指令大闹手机,让我们都成为耍猴高手(超详解)...
- 魔方(13)齿轮魔方、五阶齿轮魔方(待续)
- python爬虫知乎图片_python 爬取知乎图片
- 迁移学习一——TCA和SSTCA
- stm32ftp服务器实现文件传输,stm32 ftp服务器
- PXI/PXIe控制器 4Link架构 16GB带宽 兼容主流PXIe机箱 设计文件!!! 原理图PCB
- 密集匹配实验数据共享
- 小圈序号(1~50)
- WP手机升级到WP8.1之后一些功能的吐槽和没有Cortana,改变绿色图标的问题的解决方案以及怎样调戏Cortana
- 4.2android系统刷机
- java面试项目车辆管理_基于jsp的车辆管理系统-JavaEE实现车辆管理系统 - java项目源码...
- 〖编程初学者的自我修养 - 职业规划篇⑦〗- 如何选择最适合自己的公司?
热门文章
- package hello is not in GOROOT (/usr/local/go/src/hello)
- 两路音频合成一路电路_请高手指点下:两路模拟音频信号怎么样才能合成一路再通过喇叭输出...
- A ConvNet for the 2020s 论文笔记
- untiy接入 海康威视网络摄像头
- web前端学习中CSS,JS代码压缩
- c语言写考勤系统,C语言课程设计学生考勤系统
- 第7讲 | ICMP与ping:投石问路的侦察兵
- 深入浅出CChart 每日一课——快乐高四第四十一课 投石问路,SoUI探险第一关之弹出窗口
- 【转载】软件设计中的易用性
- JETSON XAVIER NX 入门教程(一)入手刷机过程