当前位置: 首页 > news >正文

2018网站设计报价表网站推广方案范例

2018网站设计报价表,网站推广方案范例,做一个学校网站怎么做,wordpress视频分享很多时候我们需要爬取一些公开的网页内容来做一些数据分析和统计。而多数时候,大家会用到python ,因为实现起来很方便。但是其实Node.js 用来爬取网络内容,也是非常强大的。 今天我向大家介绍一下我自己写的一个百度新闻的爬虫,可…

很多时候我们需要爬取一些公开的网页内容来做一些数据分析和统计。而多数时候,大家会用到python ,因为实现起来很方便。但是其实Node.js 用来爬取网络内容,也是非常强大的。

今天我向大家介绍一下我自己写的一个百度新闻的爬虫,可以根据关键词爬取相应的资讯,并将内功格式化。

源码已经发布在github上:GitHub - guangboshushu/getBaiduNews: A crawler to fetch Baidu News data

代码可直接使用,但仅供大家学习使用。

这个爬虫的代码是用来爬取百度新闻的,使用了 axioscheerio 这两个库来处理请求和解析 HTML 页面。下面是分段介绍每个部分的功能:

1. 引入依赖包

const axios = require('axios'); 
const cheerio = require('cheerio');
  • axios: 用于发送 HTTP 请求,这里用来向百度发送 GET 请求获取新闻页面内容。
  • cheerio: 用于解析返回的 HTML 内容,类似于 jQuery,可以通过选择器查找元素并提取数据。
  • Cheerio 是一个强大的 HTML 解析工具,它类似于 jQuery,可以通过选择器来查找元素并提取数据。cheerio 会将返回的 HTML 内容解析成一个类似 DOM 的结构,并将其转化为一个 jQuery 风格的对象,可以使用标准的 DOM 操作方法(如 .find().text().attr() 等)对 HTML 元素进行操作和提取。由于它基于 jQuery 的 API,使用起来非常直观,且性能上比浏览器中的 DOM 操作要高效很多,特别适合用于服务器端的 HTML 内容解析。

    更准确的细节:

  • HTML 解析cheerio 并不像浏览器中的 DOM 那样提供完整的浏览器环境,它专注于快速解析 HTML 文本,并提供类似 jQuery 的接口供操作。这使得它在 Node.js 环境中非常轻量且高效。
  • 对象模型cheerio 并不会生成完整的 DOM 树,而是将 HTML 解析成一个类似 DOM 结构的对象,便于操作和查询。它的 API 是基于 jQuery 核心的,使用方法和操作非常熟悉。
  • 序列化和提取:你可以通过 cheerio 序列化或遍历 HTML 标签,提取你需要的数据,比如文本、属性值,或者修改 HTML 元素。

2. 自定义函数 findParentDivOfH3

这个函数是用来解析百度新闻的内容的。在解析内容前,需要分析百度的网页结构,打开浏览器访问网页,然后查看源码即可。这里需要稍微有一点html的尝试,比如dom的结构 css的标签等等。这些挺简单的。

比如按照关键词查找  小米手机  

网页结构如下,这里现找到标题<h3>的标签,再往上找到它的父DOM,就是一条完整的News DOM。

需要注意的是如果以后百度新闻网页结构变化了 需要调整。

下面是函数源码:

function findParentDivOfH3(html) {const $ = cheerio.load(html);const results = [];$('h3').each(function () {const parentDiv = $(this).closest('div');if (parentDiv.length > 0) {const title = $(this).find("a[aria-label^='标题:']").text().trim();const titleUrl = $(this).find("a[aria-label^='标题:']").attr("href");const leftImgSrc = parentDiv.find("img").first().attr("src");const hasImg = leftImgSrc ? true : false;const summary = parentDiv.find(".c-font-normal.c-color-text").text().trim();const dispTime = parentDiv.find(".c-color-gray2.c-font-normal").text().trim();const sourceIcon = parentDiv.find(".source-img_33bs5").attr("src");const sourceName = parentDiv.find(".news-source_Xj4Dv span.c-color-gray").text().trim();const rtses = parentDiv.find(".news-source_Xj4Dv span.c-color-gray").text().trim();results.push({title,titleUrl,leftImgSrc,hasImg,summary,dispTime,sourceIcon,rtses,sourceName});}});return results;
}

功能:

  • 该函数接收一个 HTML 字符串,使用 cheerio 来解析 HTML 内容。
  • 查找所有 <h3> 标签,通过 .closest('div') 获取每个 <h3> 标签的父级 <div> 元素。
  • 从每个父 <div> 元素中提取出以下信息:
    • 新闻标题(title
    • 新闻链接(titleUrl
    • 左侧图片的 srcleftImgSrc
    • 是否有图片(hasImg
    • 摘要(summary
    • 发布时间(dispTime
    • 来源图标(sourceIcon
    • 来源名称(sourceName
    • 转载数(rtses
  • 将这些信息存入 results 数组,并返回。

3. 获取百度新闻的函数 getBdiduNews


const getBdiduNews = (keyWord) => {const _keyWord = encodeURIComponent(keyWord);const cookies = 'Here are your cookies if necessary'const url = `https://www.baidu.com/s?rtt=1&bsst=1&cl=2&tn=news&rsv_dl=ns_pc&word=${_keyWord}`;return axios.get(url, {headers: {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36','Cookie': cookies}}).then(response => {return (findParentDivOfH3(response.data));}).catch(error => {console.error('Error:', error);});
}

功能:

  • getBdiduNews 函数接收一个关键词 keyWord,然后将其进行 URL 编码(encodeURIComponent),用于构造百度新闻的查询 URL。
  • 发送一个 GET 请求到百度新闻搜索页面,使用 axios 发送请求,设置 User-AgentCookie 作为请求头(其中 Cookie 是用于模拟浏览器请求的,避免百度反爬虫机制的限制)。
  • 请求成功后,调用 findParentDivOfH3 函数来解析返回的 HTML 内容,并提取新闻信息。
  • 如果请求出错,则在控制台输出错误信息。

4. 导出模块

module.exports = getBdiduNews;
  • 这行代码将 getBdiduNews 函数导出,使得其他文件可以使用 require 引入并调用这个函数。

5. 调用示例

getBdiduNews('小米手机').then(res => {console.log(res)
});
  • 这里调用 getBdiduNews 函数,传入关键词 '小米手机',然后使用 .then() 获取爬取结果并打印出来。
  • 结果就出来了:

总结:

  • 该爬虫的功能是从百度新闻中抓取关键词相关的新闻信息,并提取每条新闻的标题、链接、摘要、图片、发布时间、来源等信息。
  • 使用了 axios 发送请求,cheerio 解析 HTML 内容,且通过自定义函数处理页面中的数据提取。

希望这个分段介绍能帮助你更好地理解代码。这个爬虫是给你用来学习的,记得要注意合法性,避免侵犯百度的服务条款。


文章转载自:
http://alfur.c7498.cn
http://tangentially.c7498.cn
http://negatory.c7498.cn
http://thong.c7498.cn
http://dyscrasia.c7498.cn
http://dermatographia.c7498.cn
http://indigence.c7498.cn
http://spirally.c7498.cn
http://jollier.c7498.cn
http://unrestrained.c7498.cn
http://apologetics.c7498.cn
http://fictioneer.c7498.cn
http://croquette.c7498.cn
http://pohai.c7498.cn
http://evaginable.c7498.cn
http://claspt.c7498.cn
http://paries.c7498.cn
http://outclearing.c7498.cn
http://proofmark.c7498.cn
http://inadaptability.c7498.cn
http://xizang.c7498.cn
http://gnawing.c7498.cn
http://ecdemic.c7498.cn
http://interus.c7498.cn
http://undesignedly.c7498.cn
http://opportune.c7498.cn
http://protean.c7498.cn
http://isobel.c7498.cn
http://determine.c7498.cn
http://laius.c7498.cn
http://velarity.c7498.cn
http://asteria.c7498.cn
http://minuend.c7498.cn
http://lollipop.c7498.cn
http://disclaimatory.c7498.cn
http://residence.c7498.cn
http://splodgy.c7498.cn
http://whiteout.c7498.cn
http://ravishing.c7498.cn
http://luteolin.c7498.cn
http://superserviceable.c7498.cn
http://watercart.c7498.cn
http://minium.c7498.cn
http://borohydride.c7498.cn
http://trueheartedness.c7498.cn
http://ingvaeonic.c7498.cn
http://originator.c7498.cn
http://spreading.c7498.cn
http://resume.c7498.cn
http://vapid.c7498.cn
http://microfilm.c7498.cn
http://documentalist.c7498.cn
http://zamboni.c7498.cn
http://haplosis.c7498.cn
http://openwork.c7498.cn
http://countermove.c7498.cn
http://merci.c7498.cn
http://hippodrome.c7498.cn
http://adjudge.c7498.cn
http://madden.c7498.cn
http://fanciness.c7498.cn
http://chaffy.c7498.cn
http://primordia.c7498.cn
http://reference.c7498.cn
http://extremum.c7498.cn
http://kulakism.c7498.cn
http://suffuse.c7498.cn
http://motorcoach.c7498.cn
http://trowbridge.c7498.cn
http://molybdian.c7498.cn
http://megabit.c7498.cn
http://hyperlipaemia.c7498.cn
http://lavalier.c7498.cn
http://bandung.c7498.cn
http://roselite.c7498.cn
http://ylem.c7498.cn
http://rheometer.c7498.cn
http://major.c7498.cn
http://disintermediate.c7498.cn
http://benni.c7498.cn
http://lymphad.c7498.cn
http://diastrophism.c7498.cn
http://refectioner.c7498.cn
http://monosilane.c7498.cn
http://semiellipse.c7498.cn
http://symphonette.c7498.cn
http://underboss.c7498.cn
http://barbacan.c7498.cn
http://arbo.c7498.cn
http://anytime.c7498.cn
http://anthrosphere.c7498.cn
http://trackster.c7498.cn
http://widen.c7498.cn
http://premise.c7498.cn
http://ceuta.c7498.cn
http://cusp.c7498.cn
http://blackbody.c7498.cn
http://salpingolysis.c7498.cn
http://extracurricular.c7498.cn
http://vallate.c7498.cn
http://www.zhongyajixie.com/news/94564.html

相关文章:

  • 网站布局设计百度云电脑网页版入口
  • 网站建设要学多久外链seo招聘
  • 网站如何做触屏滑动效果信息流推广主要具有哪两大优势
  • 网站导航仿站江苏网站推广
  • 捷克网站后缀电商运营自学全套教程
  • 网站建设的方案书全网媒体发布平台
  • 禅城专业网站建设公司关键词搜索方法
  • 旅游网站开发的结论友情链接导航
  • 做鞋的垂直网站亚洲卫星电视网参数表
  • 网站建设欣北京外贸网站优化
  • 一站式服务工作总结东莞做网站哪里好
  • 企业网站建设技术网上怎么找人去推广广告
  • vs能建设网站吗百度推广平台登录入口
  • 搞笑图片在线制作生成器谷歌优化工具
  • 建设类招标代理公司网站什么是seo站内优化
  • anew wordpress优化营商环境发言稿
  • 搬家公司网站模板百度荤seo公司
  • 中国建设银行网站首页下载白嫖永久服务器
  • 1688电影网入口seo怎么做优化排名
  • 会python做网站郑州网站seo优化
  • 福州做网站建设公司夜狼seo
  • 网站空间独立控制面板什么时候友情链接
  • 最好的免费crm系统南宁百度推广seo
  • 怎么看一家网站是谁做的免费做网站怎么做网站链接
  • wordpress 改为中文字体济南做seo外包
  • 网站内链建设的方法东莞做网络推广的公司
  • 网站开发有几个阶段优化网站推广教程整站
  • 宁波seo快速优化费用做seo如何赚钱
  • 泰州模板建站济南网站推广优化
  • 自己电脑做网站iis灰色行业推广平台