爬虫爬取实时新闻标题、时间及新闻内容并保存
2020-02-03 05:01
2341 查看
一、概述
本文主要利用selenium控制谷歌浏览器爬取百度新闻资讯及新闻资讯的内容。并保存在本地。在爬取文章内容的时候我用到了正则表达式去匹配文字内容,这里在文章中会有一些杂质出现(后续会想解决方法)。
二、软件及应用模块
1、anaconda、pycharm
anaconda里面集成了许多python的第三方库,使用起来非常方便。
在pycharm里面配置anaconda的环境具体方法可以百度,本人用的mac系统,所以win系统配置会有些许的不同。
2、requests库、openpyxl库、re模块、selenium
requests库,这个库的介绍 (https://2.python-requests.org//zh_CN/latest/user/advanced.html) (这里面讲解的非常详细)
openpyxl库是用来将数据存储到excel表格中的(如果觉得没必要可以去掉)
re模块,正则表达式主要是为了匹配我的中文字符(其实在网络爬虫中我们也可以用来定位元素的位置,但是大多数是用的xpath)
selenium 这个库其实就是自动化的模块,主要是为了实现手动翻页功能
三、代码
from selenium import webdriver from time import sleep import requests from openpyxl import workbook from openpyxl import load_workbook import re class Baidu(): def __init__(self): #这里设置的初始网址是按照资讯内容的时间排序的,也可以按照热点或这焦点排序来爬取新闻 self.start_url = 'https://www.baidu.com/s?tn=news&rtt=4&bsst=1&cl=2&wd={}' self.headers = {"User-Agent": "这里设置你自己浏览器的user-agent"} #标题列表、时间列表、新闻内容的url列表 self.title_list = [] self.time_list = [] self.content_url_list = [] self.driver = webdriver.Chrome() def get_content_list(self,start,page): #定位新闻内容的元素位置 div_list = self.driver.find_elements_by_xpath('//div[@id="content_left"]') #for循环遍历主要是为了得到不同的文章标题、时间及内容url地址 for div in div_list: for i in range(start,page): #获取标题 title = div.find_element_by_xpath("//div[@id={}]/h3[@class='c-title']/a".format(str(i+1))).text #获取时间 time = div.find_element_by_xpath("//div[@id={}]//p".format(str(i+1))).text #获取新闻内容的url地址 content_url = div.find_element_by_xpath("//div[@id={}]/h3[@class='c-title']/a".format(str(i+1))).get_attribute('href') time = time.split(' ')[1] self.title_list.append(title) self.time_list.append(time) self.content_url_list.append(content_url) #得到下一页的元素(这里一定要注意,因为如果没有后面的下一页的话会定位失败) element = self.driver.find_element_by_xpath("//p[@id='page']//a[@class='n'][text()='下一页>']") return title, time, content_url, element, (start+10), (page+10) #存储文章内容 def save_content(self, title_list, time_list, content_url_list): wb = workbook.Workbook() ws = wb.active ws.append(['新闻标题', '新闻时间', '新闻内容链接']) for i in range(len(self.title_list)): ws.append([self.title_list[i], self.time_list[i], self.content_url_list[i]]) wb.save('你自己的文件路径.xlsx') #请求网页,得到网页内容 def get_html_text(self, url, headers): try: response = requests.get(url, headers = headers) response.raise_for_status() response.encoding = response.apparent_encoding return response.text except: return "" #解析不同的网页内容,用正则匹配中文字符 def parse_html(self, html_text): try: news_text = re.findall('[\u4e00-\u9fa5]|[,。?]',html_text) news_content = ''.join(news_text) return news_content except: pass #得到文件内容,存储新闻内容 def get_news_content(self, news_url_list, title_list): for i in range(len(news_url_list)): html_text = self.get_html_text(str(news_url_list[i]), self.headers) news_content = self.parse_html(html_text) #这里需要修改成你自己的新闻内容保存路径(/Users/yupei/Desktop/news_content/) with open('你自己想要保存的路径位置' + title_list[i][:10] + '.txt', 'w') as f: f.write(news_content) f.close() def run(self): #1、请求百度网页,输入想要查询的股票内容 name = input("请输入你想要查找新闻名称:") start, page = 0, 10 self.start_url = self.start_url.format(name) self.driver.get(self.start_url) sleep(2) # 注:这里每一页的定位元素的id不断变化,所以需要去获取每一页的页数 #2、请求完成后自动点击资讯内容,选择按时间排序,爬取股票资讯内容及时间点并获取网页内容的url地址,将资讯和时间存到excel中,url保存在list中 title, time, content_url, element, start, page = self.get_content_list(start, page) #3、点击下一页继续爬取内容 try: while element is not None: element.click() sleep(2) title, time, content_url, element, start, page = self.get_content_list(start, page) except: print("网页到头啦!!!") #4、存储相应的新闻标题、新闻时间、新闻内容url信息,输出为excel表格 self.save_content(self.title_list, self.time_list, self.content_url_list) #5、爬取到的url_list,遍历得到相应的内容 self.get_news_content(self.content_url_list, self.title_list) if __name__ == '__main__': Auto_Baidu = Baidu() Auto_Baidu.run()
四、总结
整体代码感觉写的有点繁琐,还有一些需要改进和学习的地方。其实可以加一些多线程去节约运行时间(后期再改进啦~)
看到这篇文章的人如果有一些爬虫的小项目可以共同交流和进步,也可以帮一些有需求的人写小型的爬虫项目(免费),但是不做那种特别着急的爬虫项目。(如果需要的话评论区留下邮箱我会发微信到你邮箱,谢谢支持!)
- 点赞 4
- 收藏
- 分享
- 文章举报
相关文章推荐
- 利用scrapy获取抽屉新热榜的标题和内容以及新闻地址保存到本地
- 19Python爬虫--爬取新浪新闻标题并保存到数据库
- Python爬虫案例2:获取抽屉网页所有的新闻标题并保存到csv
- Python爬虫案例2:获取抽屉网页所有的新闻标题并保存到csv
- jQuery+PHP实现可编辑表格字段内容并实时保存
- crawler4j源码学习(1):搜狐新闻网新闻标题采集爬虫
- Fragment在Activity中跳转,实现类似新闻标题跳转新闻内容功能
- Python爬虫:爬取自己博客的主页的标题,链接,和发布时间
- jQuery实现下拉菜单(内容为时间)的实时更新及图表的随动更新的方法
- crawler4j源码学习(1):搜狐新闻网新闻标题采集爬虫
- 根据标题后缀名传参点击下载保存内容为任意格式文件(内容为oracle库中某字段值:BLOB类型)
- 爬虫实例1-爬取新闻列表和发布时间
- java爬虫(Jsoup)爬取某新闻站点标题
- JSP(SSH)表单上传图片以及文本内容到后台保存,上传带图片的文章新闻等
- 基于python Scrapy的爬虫——爬取某网站新闻内容
- android Jsoup获取网站内容(实例为新闻标题获取) —android网络必学
- python3.4学习笔记(十三) 网络爬虫实例代码,使用pyspider抓取多牛投资吧里面的文章信息,抓取政府网新闻内容
- 以当前时间命名文件并保存实时采集数据
- 小偷程序获取新闻标题及内容
- python爬虫——获取新闻标题