python3爬新浪新闻

import requests#插入请求模块
from bs4 import BeautifulSoup#从BS4导入BeautifulSoup
import os#插入os模块用于文件处理
def reqbs(url):#创建一个请求Response的函数
    res = requests.get(url)  # 利用requests获取网页的Rreponse
    res.encoding = 'utf-8'  # 改变网页的编码方式为utf-8,不然会乱码
    soup = BeautifulSoup(res.text, 'lxml')  # 利用BeautifulSoup解析网页,解析器用lxml
    return soup
soup = reqbs('http://news.sina.com.cn/china/')#新闻的主页
if not os.path.exists("D:/新闻"):#判断是否有这个文件夹
    os.makedirs("D:/新闻")#如果没有就创建
os.chdir("D:/新闻")##切换该文件夹下面
#print(soup)这时候可以打印soup出来看看是不是我们要的
for news in soup.select('.news-item'):#筛选出新闻的URL
    if len(news.select('h2'))> 0 :#发现部分h2标签为空,剃掉h2标签下空的组合
        title = news.select('h2')[0].text.strip()#筛选新闻的标题
        title = str(title).replace("?", '_').replace("/", '_').replace(":", '_')    #这几个符号?:‘’“”、Windows系统是不能创建文件夹的所以要替换掉
        href = news.select('a')[0]['href']#筛选出每个标题的链接
        time = news.select('.time')[0].text#取得新闻的时间
        #print(time, title, href)#打印出来看看是不是我们想要的
        Ros = reqbs(href)#利用新闻的链接取得每个新闻URL的Response
        article = []#建立一个空的列表用来存储新闻
        for p in Ros.select('#artibody p'):#筛选出新闻的具体内容
            #print(p.text)#打印出来看看是不是我们要的新闻
            article.append(p.text.strip())#将每一个找到的新闻内容加到我们的空列表里面去
            #print(article)
        fl = open(title+'.txt', 'w')#打开一个以新闻标题命名的txt文件
        fl.write('\n'.join(article))#写入我们的新闻内容,并将列表中的每一个元素进行换行合并
        fl.close()#关闭文件
        article = []#将列表再次清空
        print('Done')#表示一个新闻已经完成

原文发布于微信公众号 - 编程坑太多(idig88)

原文发表时间:2018-03-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏芋道源码1024

告诉你 Redis 是一个牛逼货

Redis 是一个 Key-Value 存储系统。和 Memcached 类似,它支持存储的 value 类型相对更多,包括 string(字符串)、 list...

15100
来自专栏mathor

软件破解逆向工程实战(一)

本系列教程无需任何基础,直接学习即可,对于没有c/c++基础的同学来说也没有什么坎,多看,多做就能掌握,同时说一下,我们的QQ群:689696631,因为本系列...

26920
来自专栏Zchannel

基于 Python 实现的用于命令行的速查工具:cheat.sh

13250
来自专栏博客园迁移

工作中的一些经验小结

控制层   返回值统一 AOP 也方便前台 AOP 统计执行时间记录日志   参数不要出现Request, Response   返回码定义 不...

8020
来自专栏Android 开发者

开发者也是用户 — 第一部分:构建更具可用性的 UI 与 API 的 5 个方针

20520
来自专栏Zephery

谈谈个人网站的建立(四)—— 日志系统的建立

谈谈个人网站的建立(四)—— 日志系统的建立 欢迎访问我的网站http://www.wenzhihuai.com/ 。感谢,如果可以,希望能在GitHub上给个...

40240
来自专栏程序员的知识天地

JavaScript设计模式与实践--适配器模式

适配器模式主要用来解决两个已有接口之间不匹配的问题,它不考虑这些接口是怎样实现的,也不考虑它们将来可能会如何演化。适配器模式不需要改变已有的接口,就能够使它们协...

22710
来自专栏FreeBuf

微信也被监控:HackingTeam语音监控代码分析

在HackingTeam泄漏的文件,我们发现了有针对主流聊天软件中的语音进行监控的代码,其中包括国内常用的微信。下面就以微信为例,来分析一下HackingTea...

32980
来自专栏Android干货

Android项目实战(四十六):Usb转串口通讯(CH34xUARTDriver)

40360
来自专栏Android群英传

跨越平台!SQLite居然在各个平台这样使用

17610

扫码关注云+社区

领取腾讯云代金券