
爬取网易科技滚动新闻
发布日期:2021-05-08 06:30:55
浏览次数:8
分类:原创文章
本文共 3018 字,大约阅读时间需要 10 分钟。
背景需求
完成作业的同时练习爬虫,利用Xpath匹配出需要爬取的内容;
需要爬取的新闻界面
需要爬取的信息
实现代码
#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2019/3/13 13:08# @Author : cunyu# @Site : cunyu1943.github.io# @File : NetaseNewsSpider.py# @Software: PyCharmimport requestsfrom lxml import etreeimport xlwtheaders = { "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36"}# 根据url获取刚网页中的新闻详情页的网址列表def getNewsDetailUrlList(url): """ :param url: 每页的URL :return newDetailList:每页包含的新闻详情URL """ response = requests.get(url, headers=headers) html = response.content.decode('gbk') selector = etree.HTML(html) newsDetailList = selector.xpath('//ul[@id="news-flow-content"]//li//div[@class="titleBar clearfix"]//h3//a/@href') return newsDetailList# 获取新闻标题def getNewsTitle(detailUrl): """ :param detailUrl:新闻详情url :return newsTitle:新闻标题 """ response = requests.get(detailUrl, headers=headers) html = response.content.decode('gbk') selector = etree.HTML(html) newsTitle = selector.xpath('//div[@class="post_content_main"]//h1/text()') return newsTitle# 获取新闻详情内容def getNewsContent(detailUrl): """ :param detailUrl: 新闻详情url :return newsContent: 新闻内容详情 """ response = requests.get(detailUrl, headers=headers) html = response.content.decode('gbk') selector = etree.HTML(html) newsContent = selector.xpath('//div[@class="post_text"]//p/text()') return newsContent# 将新闻标题和内容写入文件 TODO# 获取翻页网址列表def getUrlList(baseUrl, num): """ :param baseUrl:基础网址 :param num: 翻到第几页 :return urlList: 翻页网址列表 """ urlList = [] urlList.append(baseUrl) for i in range(2, num+1): urlList.append(baseUrl + "_" + str(i).zfill(2)) return urlListif __name__ == '__main__': baseUrl = "http://tech.163.com/special/gd2016" num = int(input('输入你要爬取的页数: ')) urlList = getUrlList(baseUrl, num) print(urlList) detailUrl = [] for url in urlList: for i in getNewsDetailUrlList(url): detailUrl.append(i) print(detailUrl) print(getNewsTitle(detailUrl[0])) print(getNewsContent(detailUrl[0])) # # 将爬取的文本存入文本文件 # with open('news.txt', 'w', encoding='utf-8') as f, open('newsTitle.txt', 'w', encoding='utf-8') as titleFile,\ # open('newsContent.txt', 'w', encoding='utf-8') as contentFile: # print('正在爬取中。。。') # for i in detailUrl: # f.write(''.join(getNewsTitle(i))) # f.write('\n') # f.write(''.join(getNewsContent(i))) # f.write('\n') # # titleFile.write(''.join(getNewsTitle(i))) # titleFile.write('\n') # # contentFile.write(''.join(getNewsContent(i))) # contentFile.write('\n') # # print('文件写入成功') # 将爬取得文本存入excel文件 # 创建一个Excel文件 workbook = xlwt.Workbook(encoding='utf-8') news_sheet = workbook.add_sheet('news') news_sheet.write(0, 0, 'Title') news_sheet.write(0, 1, 'Content') print('正在爬取中。。。') for i in range(len(detailUrl)): # print(detailUrl[i]) news_sheet.write(i + 1, 0, getNewsTitle(detailUrl[i])) news_sheet.write(i + 1, 1, getNewsContent(detailUrl[i])) # 将写入操作保存到指定Excel文件中 workbook.save('网易新闻.xls') print('文件写入成功')
结果
-
代码运行结果
-
保存的文件
总结
总体来说比较简单,代码也存在需要改进的地方,后续会改进更新,有其他想法的也可以相互交流!
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2025年04月01日 12时02分36秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
图片预览自适应固定宽高div
2021-05-08
layui表格checkbox选择全选样式及功能
2021-05-08
mxsrvs支持thinkphp3.2伪静态
2021-05-08
mui HTML5 plus 下载文件
2021-05-08
环信SDK 踩坑记webIM篇(一)
2021-05-08
短信验证码倒计时代码
2021-05-08
通信基础知识
2021-05-08
DSP开发板准备
2021-05-08
测试基本
2021-05-08
5.redo undo
2021-05-08
《JVM的内存》
2021-05-08
c++中istringstream及ostringstream超详细说明
2021-05-08
c++中ifstream及ofstream超详细说明
2021-05-08
c++中endl操作符以及它的兄弟们
2021-05-08
c++中explicit和mutable关键字探究
2021-05-08
c语言结构体字节对齐详解
2021-05-08
linux c/c++面试知识点整理(八)
2021-05-08
linux网络编程系列(十二)--滑动窗口、拥塞控制、断线重连机制
2021-05-08
c++11&14-编译
2021-05-08
Deep residual learning for image recognition
2021-05-08