如何利用 C# 爬取「京东 - 计算机与互联网图书销量榜」!
发布日期:2021-06-30 22:56:24 浏览次数:2 分类:技术文章

本文共 2832 字,大约阅读时间需要 9 分钟。

当前,信息技术领域的知识在飞速的更新。作为一个程序爱好者,或者说已经超过 10年 的老码农,稍有懈怠就会被落下!跟踪当前信息技术领域的畅销书,结合自己所做的事情买来阅读,以便提升技能,就显得非常重要了。

今天我就为大家介绍如何利用 C# 语言来爬取“京东 - 计算机与互联网图书销量榜”。


我们先来看一下这个网页:

在这里插入图片描述

当我们点击“第2页”时,我们发现URL变成:

以此类推,页码的变化会导致客户端请求参数category的变化,即3287-0-0-0-1002-13287-0-0-0-1002-2……,这样我们就找到了要爬取网页的规律。

我们再来看一下,网页的源代码:

在这里插入图片描述

可以发现,我们所要的数据全部在li标签中的class='p-detail'中,我们只要把这个网页的HTML DOM节点得到,在用“选择器”把对应的部分提取出来就可以了。

这里推荐一个处理HTML DOM的开源工具:Jumony,可以在 Github 上下载。

在这里插入图片描述

下载地址为:

这里对HTML DOM开源工具不做过多介绍,要是大家感兴趣,我后面再写几篇图文来介绍这个工具。


网页分析部分介绍完了,下面我们介绍代码部分。

1. 定义存储图书的结构 Book,代码如下:

public class Book{    ///     /// 获取或设置 销量排名    ///     public int Num { get; set; }    ///     /// 获取或设置 书名    ///     public string Title { get; set; }    ///     /// 获取或设置 作者    ///     public string Author { get; set; }    ///     /// 获取或设置 出版社    ///     public string Press { get; set; }    ///     /// Book实例的格式化输出    ///     /// 
Markdown格式文本
public override string ToString() { string num = Num.ToString().PadLeft(2, '0'); string temp = "**Top" + num + ":" + Title.Trim() + "**" + Environment.NewLine + "- 作 者:" + Author + Environment.NewLine + "- 出版社:"+Press; return temp; }}

2. 获取“京东 - 计算机与互联网图书销量榜”网页的 HTML结构 的代码如下:

public static IHtmlDocument GetHtmlDocumentJd(int page){    string url = "https://book.jd.com/booktop/0-0-0.html?"                    + "category=3287-0-0-0-1002-"                    + page                    + "#comfort";    IHtmlDocument document;    try    {        document = new JumonyParser().LoadDocument(url);    }    catch    {        document = null;    }    return document;}

3. 获取“京东 - 计算机与互联网图书销量榜”内容的代码如下:

public static List
GetBooksJd(int page){ IHtmlDocument doc = GetHtmlDocumentJd(page); if (doc == null) return null; List
result = new List
(); List
lists = doc.Find(".p-detail").ToList(); for (int i = 0; i < lists.Count; i++) { Book book = new Book(); book.Num = i + 1; List
s = lists[i].Find("a").ToList(); //得到书的名字 book.Title = s[0].InnerHtml().Trim(); List
infor = lists[i].Find("dl dd").ToList(); List
authors = infor[0].Find("a").ToList(); if (authors.Count > 1) { string temp = infor[0].InnerHtml().Remove(0, 2).Trim(); int index = temp.IndexOf("

4. 获得 Markdown 格式的字符串方法如下:

private void btnSpider_Click(object sender, EventArgs e){    List
books = BooksHtmlDocument.GetBooksJd(1); string str = "---" + Environment.NewLine + "### 京东"+Environment.NewLine; for (int i = 0; i < books.Count; i++) { str += Environment.NewLine+books[i] + Environment.NewLine; }}

5. 解析Markdown格式的文本为HTML格式文本的结果如下:

在这里插入图片描述


好了,到这里就基本介绍完毕了。

我在图文 中的“京东”部分就是这样完成的,避免了Ctrl+CCtrl+V的尴尬,提升了工作效率。

是不是很有趣,你也来试试吧!See You!


参考图文:

转载地址:https://lsgogroup.blog.csdn.net/article/details/87937691 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:股市币市:数据分析与交易所公告(20190226)
下一篇:又有六所大学考研预调剂系统已开放!

发表评论

最新留言

很好
[***.229.124.182]2024年04月26日 13时12分07秒