【趣味案例】Python 教你 4 行代码开发新闻网站通用爬虫

news/2024/5/18 15:04:54/文章来源:https://blog.csdn.net/weixin_45974643/article/details/105520332

GNE(GeneralNewsExtractor)是一个通用新闻网站正文抽取模块,输入一篇新闻网页的 HTML, 输出正文内容、标题、作者、发布时间、正文中的图片地址和正文所在的标签源代码。GNE在提取今日头条、网易新闻、游民星空、 观察者网、凤凰网、腾讯新闻、ReadHub、新浪新闻等数百个中文新闻网站上效果非常出色,几乎能够达到100%的准确率。

使用方式非常简单:

from gne import GeneralNewsExtractorextractor = GeneralNewsExtractor()
html = '网站源代码'
result = extractor.extract(html)
print(result)

GNE 的输入是经过 js 渲染以后的 HTML 代码,所以 GNE 可以配合Selenium 或者 Pyppeteer 使用。

下图是 GNE 配合 Selenium 实现的一个 Demo:

对应的代码为:

import time
from gne import GeneralNewsExtractor
from selenium.webdriver import Chromedriver = Chrome('./chromedriver')
driver.get('https://www.toutiao.com/a6766986211736158727/')
time.sleep(3)
extractor = GeneralNewsExtractor()
result = extractor.extract(driver.page_source)
print(result)

下图是 GNE 配合 Pyppeteer 实现的 Demo:

对应代码如下:

在学习过程中有什么不懂得可以加我的
python学习资源qun,855408893
群里有不错的学习视频教程、开发工具与电子书籍。
与你分享python企业当下人才需求及怎么从零基础学习好python,和学习什么内容 import asyncio
from gne import GeneralNewsExtractor
from pyppeteer import launchasync def main():browser = await launch(executablePath='/Applications/Google Chrome.app/Contents/MacOS/Google Chrome')page = await browser.newPage()await page.goto('https://news.163.com/20/0101/17/F1QS286R000187R2.html')extractor = GeneralNewsExtractor()result = extractor.extract(await page.content())print(result)input('检查完成以后回到这里按下任意键')asyncio.run(main())

如何安装 GNE

现在你可以直接使用 pip 安装 GNE 了:

pip install gne

如果访问pypi 官方源太慢,你也可以使用网易源:

pip install gne -i https://mirrors.163.com/pypi/simple/

安装过程如下图所示:

功能特性

获取正文源代码

extract()方法只传入网页源代码,不添加任何额外参数时,GNE 返回如下字段:

  • title:新闻标题

  • publish_time:新闻发布时间

  • author:新闻作者

  • content:新闻正文

  • images: 正文中的图片(相对路径或者绝对路径)

可能有些朋友希望获取新闻正文所在标签的源代码,此时可以给extract()方法传入with_body_html参数,设置为 True:

extractor = GeneralNewsExtractor()
extractor.extract(html, with_body_html=True)

返回数据中将会增加一个字段body_html,它的值就是正文对应的 HTML 源代码。

运行效果如下图所示:

总是返回图片的绝对路径

默认情况下,如果新闻中的图片使用的是相对路径,那么 GNE 返回的images字段对应的值也是图片相对路径的列表。

如果你想始终让 GNE 返回绝对路径,那么你可以给extract()方法增加host参数,这个参数的值是图片的域名,例如:

extractor = GeneralNewsExtractor()
extractor.extract(html, host='https://www.kingname.info')

这样,如果新闻中的图片是/images/pic.png,那么 GNE 返回时会自动把它变为https://www.kingname.info/images/pic.png

指定新闻标题所在的 XPath

GNE 预定义了一组 XPath 和正则表达式用于提取新闻的标题。但某些特殊的新闻网站可能无法提取标题,此时,你可以给extract()方法指定title_xpath参数,用于提取新闻标题:

extractor = GeneralNewsExtractor()
extractor.extract(html, title_xpath='//title/text()')

提前移除噪声标签

某些新闻下面可能会存在长篇大论的评论,这些评论看起来比新闻正文“更像”正文,为了防止他们干扰新闻的提取,可以通过给extract()方法传入noise_node_list参数,提前把这些噪声节点移除。noise_node_list的值是一个列表,里面是一个或多个 XPath:

extractor = GeneralNewsExtractor()
extractor.extract(html, noise_node_list=['//div[@class="comment-list"]', '//*[@style="display:none"]'])

使用配置文件

API 中的参数 title_xpath、 host、 noise_node_list、 with_body_html除了直接写到 extract()方法中外,还可以通过一个配置文件来设置。

请在项目的根目录创建一个文件 .gne,配置文件可以用 YAML 格式,也可以使用 JSON 格式。

  • YAML 格式配置文件

title:xpath: //title/text()
host: https://www.xxx.com
noise_node_list:- //div[@class=\"comment-list\"]- //*[@style=\"display:none\"]
with_body_html: true
  • JSON 格式配置文件
{"title": {"xpath": "//title/text()"},"host": "https://www.xxx.com","noise_node_list": ["//div[@class=\"comment-list\"]","//*[@style=\"display:none\"]"],"with_body_html": true
}

这两种写法是完全等价的。

配置文件与 extract() 方法的参数一样,并不是所有字段都需要提供。你可以组合填写你需要的字段。

如果一个参数,既在 extract() 方法中,又在 .gne 配置文件中,但值不一样,那么 extract() 方法中的这个参数的优先级更高。

FAQ

GeneralNewsExtractor(以下简称GNE)是爬虫吗?

GNE不是爬虫,它的项目名称General News Extractor表示通用新闻抽取器。它的输入是HTML,输出是一个包含新闻标题,新闻正文,作者,发布时间的字典。你需要自行设法获取目标网页的HTML。

GNE 现在不会,将来也不会提供请求网页的功能。

GNE支持翻页吗?

GNE不支持翻页。因为GNE不会提供网页请求的功能,所以你需要自行获取每一页的HTML,并分别传递给GNE。

GNE支持哪些版本的Python?

不小于Python 3.6.0

我用requests/Scrapy获取的HTML传入GNE,为什么不能提取正文?

GNE是基于HTML来提取正文的,所以传入的HTML一定要是经过JavaScript渲染以后的HTML。而requests和Scrapy获取的只是JavaScript渲染之前的源代码,所以无法正确提取。

另外,有一些网页,例如今日头条,它的新闻正文实际上是以JSON格式直接写在网页源代码的,当页面在浏览器上面打开的时候,JavaScript把源代码里面的正文解析为HTML。这种情况下,你在Chrome上面就看不到Ajax请求。

所以建议你使用Puppeteer/Pyppeteer/Selenium之类的工具获取经过渲染的HTML再传入GNE。

对Python感兴趣或者是正在学习的小伙伴,可以加入我们的Python学习扣qun:855408893 ,从0基础的python脚本到web开发、爬虫、django、数据挖掘数据分析等,0基础到项目实战的资料都有整理。送给每一位python的小伙伴!每晚分享一些学习的方法和需要注意的小细节,学习路线规划,利用编程赚外快。点击加入我们的 python学习圈

GNE 支持非新闻类网站吗(例如博客、论坛……)

不支持。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_844126.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【趣味案例】用Python假装黑客装逼,当着朋友的面破解他的网站密码!

如何破解iphone登陆密码 今天看了一篇关于如何破解iphone手机密码的文章,瞬间觉得科学技术不是第一生产力,why? 根据“可靠消息”称,即便美国FBI也无法轻易的对iphone手机进行暴力破解,当然美国有一家黑客公司可针对i…

爬虫Scrapy框架学习(六)-腾讯招聘网站台爬取案例-深究CrawlSpider类在项目中的具体功能

在本案例中将对传统Spider类和CrawlSpider在实际项目中的应用进行对比,所完成的功能为一样的结果,采用三种不同的方式进行代码编写,请读者自行学习。 传统Spider实现数据爬取CrawlSpider实现数据读取(网站解析有问题暂时不能够实…

如何用Python爬取小游戏网站,把喜欢的游戏收藏起来(附源码)

简介: Python 是一门简单易学且功能强大的编程语言,无需繁琐的配置,掌握基本语法,了解基本库函数,就可以通过调用海量的现有工具包编写自己的程序,轻松实现批量自动化操作,可以极大提高办公和学…

遇到网站的反爬虫机制,那么我们应该来如何应对呢?

前言 本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。 1、使用代理 适用情况:限制IP地址情况,也可解决由于“频繁点击”而需要输入验证码登陆的情况。 这种情况最好的办法就是…

django网站部署流程

服务器 买个服务器,在管理控制台里开启80端口443端口,我用的是阿里云,学生免费试用一年(白嫖)远程登录到服务器,用scp将本地项目上传到云服务器 # win10的Powershell或者下载WinSCP软件 scp -r 本地项目文…

2008服务器网站设置密码,2008服务器怎么设置密码

2008服务器怎么设置密码 内容精选换一换代码迁移工具进行代码迁移时,需要调用Linux下的rpm、deb等命令才能完成扫描和迁移相关任务,这些命令和逻辑必须在后端Linux运行。IDE插件只支持以Web模式使用root用户安装工具,不支持以CLI模式安装工具…

vue - - - vuepress文档网站部署github

环境 安装nodejs: https://nodejs.org/en/, 版本不能太高(> 8.6即可) 安装git: https://git-scm.com/ Hello World vuepress官网: https://www.vuepress.cn/ 第3步需要等待下载依赖. 1~3步完整命令: zichenDESKTOP-3176F4L MINGW64 ~/Desktop $ mkdir vuepress-starter…

网站数据统计分析之一:日志收集原理及其实现

转 http://my.oschina.net/leejun2005/blog/292709 网站数据统计分析工具是网站站长和运营人员经常使用的一种工具,比较常用的有谷歌分析、百度统计 和 腾讯分析等等。所有这些统计分析工具的第一步都是网站访问数据的收集。目前主流的数据收集方式基本都是基于jav…

科技企业网站(1) - 开发背景 - 系统设计

1.开发背景 2.系统设计 2.1 系统目标 界面设计见解、友好、美观大方。操作简单、快捷方便。数据存储安全、可靠。信息分类清晰、准确。强大的模糊查询功能,保证数据查询的灵活性。提供灵活、方便的权限设置功能,使整个系统的管理明确。 2.2 系统功能…

科技企业网站(2) - ThinkPHP框架入门基础知识

1.基础概念 2.使用ThinkPHP框架开发的目录结构 ThinkPHP框架中目录分为两种:系统目录和项目目录。 系统目录是下载ThinkPHP框架库本身的,而项目目录是用户实际应用的目录。ThinkPHP采用自动创建文件夹的机制。 3.自动生成目录,编写入口文…

科技企业网站(3) - 数据库设计

1.数据库概要说明 采用MySQL数据库,用来存储图书相关信息、新闻相关信息、管理员信息等,这里将数据库命名为db_project,其中包含了3张数据表,用于存储不同的信息。 2.数据库概念设计 通过系统功能结构的确定,规划…

科技企业网站(5) - 业界新闻页面设计

1.ThinkPHP框架的导包和加载技术 2.业界新闻页面实现过程 循环输出二位数组的标签&#xff0c;此标签包含两个参数&#xff0c;name指定控制器中传递进来的模板变量&#xff0c;id指定模板变量中的临时变量。 <!DOCTYPE html> <html lang"zh-CN">&l…

科技企业网站(6) - 图书开发页面设计

一、图书开发模块实现过程 1.图片平滑滚动效果关键代码&#xff1a; <!-- 设置图片初始向左滚动并且每隔200毫秒滚动1个像素距离 --> <img src"../Public/Images/JavaII.jpg" width"140px" height"174px" /> <img src"../…

科技企业网站(7) - 后台登录模块

1.管理员权限控制技术 难点&#xff1a;如何才能防止用户越过表单登录到后台管理界面 解决&#xff1a;为了体现越过表单的可行性&#xff0c;笔者在编写的网站程序&#xff0c;故意将SESSION变量写到控制器中&#xff0c;这样任何一个用户都可以登录到网站的后台管理界面。但…

移动前端——通过Chrome自带的开发者工具Emulation模拟移动设备访问网站

一、使用方法 通过快捷键F12或ctrlshifti打开开发者工具&#xff0c;点击左上角类似手机的图标即可查看到Emulation所在的目录&#xff1b; 二、关于Emulation Device&#xff08;设备信息&#xff09;——Model 用于选择模拟的移动设备 ——Resolution 分辨率设置——Divic…

Docker 1--相关资源网站

大家好&#xff0c;我是神韵&#xff0c;是一个技术&生活博主。出文章目的主要是两个&#xff0c;一是好记忆不如烂笔头&#xff0c;记录总结中提高自己。二是希望我的文章可以帮到大家。欢迎来点赞打卡&#xff0c;你们的行动将是我无限的动力。 本篇主题是&#xff1a;相…

一家公司网站上的招聘人才招聘栏目

我不做任何评价。 转载于:https://www.cnblogs.com/Johnson/archive/2007/06/13/782211.html

出租空间位置,给您的网站做连接!

为防止空间位置的浪费&#xff0c;特批了一块地下来&#xff0c;让大家来踩&#xff0c;呵呵&#xff0c;需要搞连接的直接留言&#xff0c;嘿嘿&#xff0c;不过&#xff0c;可不是完全免费的哦&#xff01;转载于:https://blog.51cto.com/sam2080/8093

20个使用网页大背景的网站设计案例

网站大背景使用得好的话&#xff0c;能够让网页看起来有一个非常整体一致的效果&#xff0c;下面与大家分享20个使用网页大背景的网站设计案例。 kuletos.com benthomsonphoto.com gardenerandmarks.com.au krijtenberg.nl demainjarrete.stpo.fr lettercaseapp.com hdqt.co.uk…