目录

  • 前言
  • 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指定爬取新浪新闻相关推荐

  1. Python爬虫爬取新浪新闻内容

    首先感谢丘祐玮老师在网易云课堂的Python网络爬虫实战课程,接下来也都是根据课程内容而写.一来算是自己的学习笔记,二来分享给大家参考之用. 课程视频大概是在16年11月录制的,现在是18年2月.其中 ...

  2. 从入门到入土:Python爬虫学习|实例练手|爬取新浪新闻搜索指定内容|Xpath定位标签爬取|代码注释详解

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  3. python爬取新浪新闻

    最近公司项目比较少,楼主闲了好长时间了,作为一个刚毕业几个月的新人,心里很烦躁,只能自己找点新东西去学了.看到周围好多人都接触了爬虫,再加上楼主最近沉迷吴宣仪不可自拔,每天投票投票,投票的同时需要监控 ...

  4. 网络爬虫-----python爬取新浪新闻

    思路:先爬取首页,然后通过正则筛选出所有文章url,然后通过循环分别爬取这些url到本地 #python新闻爬虫实战 import urllib.request import re url = 'ht ...

  5. python爬虫-使用BeautifulSoup爬取新浪新闻标题

    ** python爬虫-使用BeautifulSoup爬取新浪新闻标题 ** 最近在学习爬虫的技巧,首先学习的是较为简单的BeautifulSoup,应用于新浪新闻上. import requests ...

  6. 使用python网络爬虫爬取新浪新闻(一)

    使用python网络爬虫爬取新浪新闻 第一次写博客,感觉有点不太习惯!不知道怎么突然就想学学爬虫了,然后就用了一天的时间,跟着教程写了这个爬虫,!不说废话了,我将我从教程上学习的东西整个写下来吧,从头 ...

  7. java实现爬取新浪新闻指定天数(一段时间)的头条新闻

    目标:java实现爬取新浪新闻指定天数(一段时间)的头条新闻 需要导入jar包:fastjson和Jsoup. IDEA导入jar包办法:Intellij IDEA 添加jar包的三种方式 思路: 找 ...

  8. python爬虫scrapy爬取新闻标题及链接_18Python爬虫---CrawlSpider自动爬取新浪新闻网页标题和链接...

    一.爬取新浪新闻思路 1.创建scrapy项目 2.分析新浪新闻网站静态页面代码 3.编写对应的xpath公式 4.写代码 二.项目代码 步骤1.创建scrapy项目 scrapy startproj ...

  9. Python网络爬虫爬取新浪新闻

    笔者最近由于需要研究互联网新闻,于是基于邱老师的网络爬虫实战,写了一个爬取新浪新闻的爬虫,爬取的信息有: 新闻标题 来源url 发布时间 正文 编辑者 与邱老师的爬虫相比有以下几点不同: 没有爬取新闻 ...

最新文章

  1. 判断是否移动端设备的JS代码,超短,百度都用它
  2. Visual Paradigm 教程[UML]:如何使用刻板印象和标记值?(下)
  3. 前Oracle首席工程师怒喷:MySQL 是“超烂的数据库”,建议考虑 PostgreSQL
  4. Windows核心编程_判断是否管理员权限运行
  5. ajax存储表单数据,使用ajax json将表单数据存储到数据库php
  6. RocketMQ(十四)RocketMQ消息重试机制
  7. qcc300x笔记之固件升级(六)
  8. Win7平台上通过QQ查询对方IP地址
  9. Appium+python自动化(二十一)- 让猴子按你指令大闹手机,让我们都成为耍猴高手(超详解)...
  10. 魔方(13)齿轮魔方、五阶齿轮魔方(待续)
  11. python爬虫知乎图片_python 爬取知乎图片
  12. 迁移学习一——TCA和SSTCA
  13. stm32ftp服务器实现文件传输,stm32 ftp服务器
  14. PXI/PXIe控制器 4Link架构 16GB带宽 兼容主流PXIe机箱 设计文件!!! 原理图PCB
  15. 密集匹配实验数据共享
  16. 小圈序号(1~50)
  17. WP手机升级到WP8.1之后一些功能的吐槽和没有Cortana,改变绿色图标的问题的解决方案以及怎样调戏Cortana
  18. 4.2android系统刷机
  19. java面试项目车辆管理_基于jsp的车辆管理系统-JavaEE实现车辆管理系统 - java项目源码...
  20. 〖编程初学者的自我修养 - 职业规划篇⑦〗- 如何选择最适合自己的公司?

热门文章

  1. package hello is not in GOROOT (/usr/local/go/src/hello)
  2. 两路音频合成一路电路_请高手指点下:两路模拟音频信号怎么样才能合成一路再通过喇叭输出...
  3. A ConvNet for the 2020s 论文笔记
  4. untiy接入 海康威视网络摄像头
  5. web前端学习中CSS,JS代码压缩
  6. c语言写考勤系统,C语言课程设计学生考勤系统
  7. 第7讲 | ICMP与ping:投石问路的侦察兵
  8. 深入浅出CChart 每日一课——快乐高四第四十一课 投石问路,SoUI探险第一关之弹出窗口
  9. 【转载】软件设计中的易用性
  10. JETSON XAVIER NX 入门教程(一)入手刷机过程