全球时报英语新闻爬虫

程序说明

本程序爬取了全球时报的新闻
本程序是由于上某课需要英文数据学习使用所以爬取了全球时报数据作为用例
禁止转载,禁止非学习外其它用途

使用方法

使用方法
安装python3
安装所需库 pip install -r requirements.txt
程序使用selenium模拟Edge进行爬取 请配置好Edge的webdriver

  1. 查看Edge版本
  2. 下载对应的WebDriver

    点此查看Edge的WebDriver
  3. 将webDriver放在你的Python目录下
    Anaconda用户通常在Anaconda/envs里能找到你对应的虚拟环境
  4. 修改webdriver.py的配置

下载配置到python文件夹并修改包内的 webdriver.py 文件
WebDriver配置通常在你的Python目录下的Lib\site-packages\selenium\webdriver\下,我们这里是Edge的

配好后现在就可以使用了
可以用下面代码测试一下是否能调出浏览器,查看网页是否正常

from selenium import webdriver
browser = webdriver.Edge()
browser.get('https://www.csdn.net/')
browser.quit()

其他浏览器操作类似,修改WebDriver的类型即可

程序

Python3(我是用Python3.8.11)
所需库

xlrd
xlwt
selenium
lxml
xlutils

可粘到目录下保存为requirements.txt,使用pip install -r requirements.txt安装完

#!/usr/bin/python
# -*- coding:utf-8 -*-import xlrd
import xlwt
import time
import logging
import xlutils.copy
from time import sleep
from lxml import etree
from selenium import webdriverlogging.basicConfig(level = logging.DEBUG) class crawler:''' 环球时报新闻爬取类类实现了爬取环球时报各个栏目下的一定数量的文章并将其存入excel文件中Auther: GyAttributes: url : 爬取的页面的urlcolumn_dict : 爬取栏目字典(中文目前未使用)excel_file_name : 保存文档名crawl_page_num : 爬取栏目页面的几页(模拟用户点击MORE)deiver_wait_time : 隐式等待(浏览器加载项目最长等待时间)passage_wait_time : 进入页面后等待多久'''def __init__(self, url, column_dict, excel_file_name, excel_sheet_name, crawl_page_num = 10, deiver_wait_time = 10, page_wait_time = 1):''' 初始化 '''self.url = urlself.column_dict = column_dictself.excel_file_name = '{}_{}_crawl_by_gy.xls'.format(excel_file_name, time.strftime("%Y-%m-%d", time.localtime()))self.excel_sheet_name = excel_sheet_nameself.excel_sheet_title = ['标题', '栏目', '作者', '发布时间', '链接', '内容']self.crawl_page_num = crawl_page_numself.page_wait_time = page_wait_timeself.browser = webdriver.Edge()self.browser.implicitly_wait(deiver_wait_time)def crawl(self):'''开始爬取'''logging.info('建表并写入表头')workbook = xlwt.Workbook(encoding = 'utf-8')worksheet = workbook.add_sheet(self.excel_sheet_name)for si, i in enumerate(self.excel_sheet_title):worksheet.write(0, si, i)workbook.save(self.excel_file_name)logging.info('开始爬取')for column, column_name in self.column_dict.items():logging.info('爬取栏目 {}'.format(column))self.process_a_column(column)self.browser.quit()logging.info('爬取完成')def process_a_column(self, column):'''爬取一个栏目Args:column : 栏目名'''self.browser.get('{}/{}'.format(self.url, column))sleep(self.page_wait_time)for times in range(self.crawl_page_num):#点击MORE展开一页self.browser.find_element_by_class_name('show_more').click()sleep(self.page_wait_time)source = self.browser.page_sourcelogging.info('开始解析栏目 {}'.format(column))try:html_tree = etree.HTML(source)passage_list = self.process_column_link(html_tree)except Exception as e:logging.error('解析栏目 {} 链接失败,错误信息: {}'.format(column, e))logging.info('栏目 {} 解析完成'.format(column))try:for title, link in passage_list:self.process_a_passage(title, link, column)except Exception as e:logging.error('处理文章失败,错误信息: {}'.format(e))def process_column_link(self, html_tree):'''处理页面获取所有文章标题和连接Args:html : 栏目的树结构Returns:一个文章标题和链接元组构成的列表'''ret_list = []passages_list = html_tree.xpath('//div[@class="level01_list"]//div[@class="list_info"]/a')if passages_list:for passage in passages_list:title = passage.xpath('./text()')[0]link = passage.xpath('./@href')[0]logging.debug('获取到当前文章 {} , url {}'.format(title, link))ret_list.append((title, link))return ret_listdef process_a_passage(self, title, link, column):'''处理文章信息Args:title : 文章标题link : 链接column : 栏目'''logging.info('正在处理文章 {} 链接 {}'.format(title, link))row = []self.browser.get(link)sleep(self.page_wait_time)source = self.browser.page_sourcehtml_tree = etree.HTML(source)content_lst = html_tree.xpath('//div[@class="article_page"]//div[@class="article"]//div[@class="article_content"]//div[@class="article_right"]/br')#找不到文章内容直接退出if not content_lst:return#获取文章内容content = ''for one_content in content_lst:if one_content.tail:content = content + '\n' + one_content.tail.strip()author_and_publictime_span = html_tree.xpath('//div[@class="article_page"]//div[@class="article"]//div[@class="article_top"]//div[@class="author_share"]//div[@class="author_share_left"]/span')#获取作者auther = author_and_publictime_span[0].text.replace('By ', '')#获取发表时间public_time = author_and_publictime_span[1].text.replace('Published: ', '')row.append(title)row.append(column)row.append(auther)row.append(public_time)row.append(link)row.append(content)self.write_excel(row)logging.debug('爬取一条信息 : {} {} {} {} {} {}'.format(title,column, auther, public_time, link, content))logging.info('文章 {} 处理完成'.format(title))def write_excel(self, row):'''写入文章信息Args:row : 处理完写入一行的内容'''try:book = xlrd.open_workbook(self.excel_file_name, formatting_info=True)    # 读取Excelcopy_book = xlutils.copy.copy(book)copy_sheet = copy_book.get_sheet(self.excel_sheet_name)rowns = len(copy_sheet.rows)for si, i in enumerate(row):copy_sheet.write(rowns, si, i)copy_book.save(self.excel_file_name)except Exception as e:logging.error('读取文件失败,错误信息: {}'.format(e))if __name__ == '__main__':news_columns_dict = {'politics' : '政治','society' : '社会','diplomacy' : '外交','military' : '军事','science' : '科学','odd' : '奇文','graphic' : '图文','100-CPC-Stories-in-100-Days' : '100天100个CPC故事'}globaltimes_crawler = crawler('https://www.globaltimes.cn/china', news_columns_dict, 'globaltimes_news', 'globaltimes', 10)globaltimes_crawler.crawl()

结果如下

谢谢使用

全球时报英语新闻爬虫相关推荐

  1. 新闻平台聚合之腾讯新闻爬虫发布

    idea of startproject 对于 web 开发者而言,目前各大新闻门户网站,新浪新闻,百度新闻,腾讯新闻,澎湃新闻,头条新闻并没有提供稳定可用的 feed api. 对于 nlper,缺 ...

  2. 小型新闻爬虫查询网站

    小型新闻爬虫查询网站 作业要求 核心需求: 1.选取3-5个代表性的新闻网站(比如新浪新闻.网易新闻等,或者某个垂直领域权威性的网站比如经济领域的雪球财经.东方财富等,或者体育领域的腾讯体育.虎扑体育 ...

  3. python 大量网络请求_大规模异步新闻爬虫之网络请求函数的优化

    前面我们实现了一个简单的再也不能简单的新闻爬虫,这个爬虫有很多槽点,估计大家也会鄙视这个爬虫.上一节最后我们讨论了这些槽点,现在我们就来去除这些槽点来完善我们的新闻爬虫. 问题我们前面已经描述清楚,解 ...

  4. python实现新闻网站_如何用 100 行 Python 代码实现新闻爬虫?这样可算成功?

    每天我都要坐地铁上班,而地铁里信号差.但我希望在坐地铁的时候读些新闻,于是就写了下面这个新闻爬虫.我并没有打算做很漂亮的应用,所以只完成了原型,它可以满足我最基本的需求.其思路很简单: 找到新闻源;用 ...

  5. Python 大规模异步新闻爬虫、google翻译、百度翻译、有道翻译、百度指数

    参考:https://www.yuanrenxue.com/crawler/news-crawler-urlpool.html url_pool.py # -*- coding: utf-8 -*- ...

  6. 计算器百分号如何用代码实现_如何用 100 行 Python 代码实现新闻爬虫?这样可算成功?...

    每天我都要坐地铁上班,而地铁里信号差.但我希望在坐地铁的时候读些新闻,于是就写了下面这个新闻爬虫.我并没有打算做很漂亮的应用,所以只完成了原型,它可以满足我最基本的需求.其思路很简单: 找到新闻源:用 ...

  7. 基于Scrapy框架的Python新闻爬虫

    概述 该项目是基于Scrapy框架的Python新闻爬虫,能够爬取网易,搜狐,凤凰和澎湃网站上的新闻,将标题,内容,评论,时间等内容整理并保存到本地 详细 代码下载:http://www.demoda ...

  8. python 爬取财经新闻_如何用 100 行 Python 代码实现新闻爬虫?

    CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 每天我都要坐地铁上班,而地铁里完全没有手机信号.但我希望在坐地铁的时候读些新闻,于是就写了下面这个新闻爬虫. 我 ...

  9. 教你如何听懂英语新闻

    (一)尽量先以自己熟悉的语言了解新闻内容 刚到 ICRT 国内新闻中心上班的外籍记者,虽然多半中文程度并不差,但是有时候「新闻中文」并不强,在翻译或阅读一些中文的新闻稿时,虽然可以查单字,但要完全了解 ...

  10. Python爬虫实战项目:简单的百度新闻爬虫

    这个实战例子是构建一个大规模的异步新闻爬虫,但要分几步走,从简单到复杂,循序渐进的来构建这个Python爬虫 本教程所有代码以Python 3.6实现,不兼顾Python 2,强烈建议大家使用Pyth ...

最新文章

  1. tomcat服务器两个端口配置两个项目,Tomcat 7通过设置不同的端口部署两个项目
  2. 森林正版服务器,The Forest 专用服务器设置向导
  3. 让XP远程桌面支持多用户
  4. dell主板40针开机针脚_电脑主板各种接口的介绍最新版
  5. 平安城市与智慧城市对接的关键要素
  6. 在CentOS6虚拟机上安装VirtualBox增强功能
  7. AWS CEO Andy Jassy 专访:我们一直思考的是未来 2-5 年的事 | 人物志
  8. bootstrap文件不能被识别_Spring Boot 配置文件 bootstrap / application 到底有什么区别?...
  9. 拳王公社:网络引流的“4大核心秘诀“,让客户源源不断地加你
  10. 机械+固态双硬盘时机械硬盘卡顿问题解决
  11. Python模块02/序列化/os模块/sys模块/haslib加密/collections
  12. idea 调节背景护眼_网易严选皓月护眼台灯评测:真正专业智能台灯,保护眼睛设计超强...
  13. 使用 Unbound 创建DNS服务器
  14. 微信小程序,电子商城中快速实现收货地址(包含前端和后台实现)
  15. 谷歌浏览器安装json-handle插件
  16. HTML中img路径问题
  17. 跳一跳小游戏刷分解读
  18. 北京大学计算机考研专业课考什么,北大计算机怎样考
  19. 如何将Mac Outline笔记本与OneNote同步
  20. 新型城镇化提质扩容 打造民村智慧城市

热门文章

  1. 计算机电脑连接wifi,计算机应如何连接到WiFi?笔记本WiFi设置方法[详细步骤]
  2. 上海电信光猫设置虚拟服务器,你们想要的上海电信光猫桥接+4K IPTV配置流程...
  3. Landsat卫星MSS/TM/ETM数据(转自ESRI社区)(二)
  4. 苹果设备型号代码 device model id / device codes(更新至iPhone 13 / iPhone SE3 / iPad Air 5代
  5. win pe备份linux,Windows10操作系统如何使用微PE实现备份与恢复
  6. linux下ssh安装教程,linux安装ssh
  7. 朗途职业规划之二 基本分析报告 (北森测评)
  8. Tushare的安装及使用介绍
  9. S7-200作MODBUS RTU主站和从站例程教学
  10. VS2015安装教程