c#爬虫爬取京东的商品信息

c#爬虫爬取京东的商品信息

爬取京东商品信息需要实现以下步骤:

  1. 获取京东的商品列表页面
  2. 从列表页面中提取所有商品的链接
  3. 访问每个商品链接获取商品详情页面
  4. 从商品详情页面中提取商品信息
  5. 将商品信息保存到本地或者数据库,可以使用CSV或者Excel格式保存

1. 获取京东的商品列表页面

string url = "https://list.jd.com/list.html?cat=1713,3267,3394";

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

request.Method = "GET";

string html = string.Empty;

using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
    using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("GBK")))
    {
        html = reader.ReadToEnd();
    }
}

以上代码使用GET方式获取京东的商品列表页面,返回结果保存在html变量中。

2. 从列表页面中提取所有商品的链接

HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument();

document.LoadHtml(html);

HtmlNodeCollection nodes = document.DocumentNode.SelectNodes("//div[@class='p-name']/a");

foreach (HtmlNode node in nodes)
{
    string href = node.Attributes["href"].Value;
    string url = "https:" + href;
    Console.WriteLine(url);
}

以上代码使用HtmlAgilityPack解析HTML页面,提取所有商品链接,并将链接打印出来。

3. 访问每个商品链接获取商品详情页面

string url = "https://item.jd.com/100006411924.html";

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

request.Method = "GET";

string html = string.Empty;

using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
    using (StreamReader reader = new StreamReader(response.GetResponseStream()))
    {
        html = reader.ReadToEnd();
    }
}

以上代码使用GET方式访问每个商品链接,返回结果保存在html变量中。

4. 从商品详情页面中提取商品信息

HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument();

document.LoadHtml(html);

string title = document.DocumentNode.SelectSingleNode("//div[@class='sku-name']").InnerText;
string price = document.DocumentNode.SelectSingleNode("//span[@class='price J-p-"+productId+"']");
Console.WriteLine("商品名称:" + title);
Console.WriteLine("商品价格:" + price);

以上代码使用HtmlAgilityPack解析商品详情页面,提取商品名称和价格,并将结果打印出来。

5. 保存商品信息到本地或者数据库

using (StreamWriter writer = new StreamWriter("result.csv", true, Encoding.UTF8))
{
    writer.WriteLine("\"" + title + "\",\"" + price + "\"");
}

以上代码使用StreamWriter将商品名称和价格保存到CSV文件中,格式为"商品名称","商品价格"。

SqlConnection conn = new SqlConnection("Data Source=(local);Initial Catalog=mydb;Integrated Security=True");

string sql = "INSERT INTO products (title, price) VALUES (@title, @price)";

using (SqlCommand cmd = new SqlCommand(sql, conn))
{
    cmd.Parameters.AddWithValue("@title", title);
    cmd.Parameters.AddWithValue("@price", price);
    conn.Open();
    cmd.ExecuteNonQuery();
    conn.Close();
}

以上代码使用SqlConnection将商品名称和价格保存到SQL Server数据库的products表中。

示例

下面是一个简单的程序,演示如何使用以上代码获取京东商品信息。

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using HtmlAgilityPack;
using System.Data.SqlClient;

namespace JDProductCrawler
{
    class Program
    {
        static void Main(string[] args)
        {
            string url = "https://list.jd.com/list.html?cat=1713,3267,3394";

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

            request.Method = "GET";

            string html = string.Empty;

            using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
            {
                using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("GBK")))
                {
                    html = reader.ReadToEnd();
                }
            }

            HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument();

            document.LoadHtml(html);

            HtmlNodeCollection nodes = document.DocumentNode.SelectNodes("//div[@class='p-name']/a");

            foreach (HtmlNode node in nodes)
            {
                string href = node.Attributes["href"].Value;
                string url2 = "https:" + href;

                HttpWebRequest request2 = (HttpWebRequest)WebRequest.Create(url2);

                request2.Method = "GET";

                string html2 = string.Empty;

                using (HttpWebResponse response = (HttpWebResponse)request2.GetResponse())
                {
                    using (StreamReader reader = new StreamReader(response.GetResponseStream()))
                    {
                        html2 = reader.ReadToEnd();
                    }
                }

                HtmlAgilityPack.HtmlDocument document2 = new HtmlAgilityPack.HtmlDocument();

                document2.LoadHtml(html2);

                string title = document2.DocumentNode.SelectSingleNode("//div[@class='sku-name']")
                    .InnerHtml.Trim();
                string price = document2.DocumentNode.SelectSingleNode("//span[@class='price J-p-100006411924']")
                    ?.InnerHtml.Trim();

                Console.WriteLine("商品名称:" + title);
                Console.WriteLine("商品价格:" + price);

                using (StreamWriter writer = new StreamWriter("result.csv", true, Encoding.UTF8))
                {
                    writer.WriteLine("\"" + title + "\",\"" + price + "\"");
                }

                SqlConnection conn = new SqlConnection("Data Source=(local);Initial Catalog=mydb;Integrated Security=True");

                string sql = "INSERT INTO products (title, price) VALUES (@title, @price)";

                using (SqlCommand cmd = new SqlCommand(sql, conn))
                {
                    cmd.Parameters.AddWithValue("@title", title);
                    cmd.Parameters.AddWithValue("@price", price ?? "0");
                    conn.Open();
                    cmd.ExecuteNonQuery();
                    conn.Close();
                }
            }
        }
    }
}

以上程序会自动获取京东液晶屏幕的商品信息,并保存到CSV文件和SQL Server数据库中。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c#爬虫爬取京东的商品信息 - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • C#从字符串中指定位置移除子字符串的方法

    请允许我给出一份详细的攻略来回答您的问题。 问题分析 在C#中,我们可以轻松地使用String类型的Remove方法来从字符串中删除指定的子字符串。但是有一些时候,我们需要从字符串的指定位置开始移除子字符串,这些子字符串可能会出现多次,或者不止一个。 这就需要我们使用Substring方法来截取字符串,并使用Replace方法来将需要移除的子字符串替换为空字…

    C# 2023年6月8日
    00
  • C# SQLite事务操作方法分析

    C# SQLite事务操作方法分析 SQLite是一种轻型且功能强大的关系型数据库,它广泛应用于各种类型的应用程序开发中。在C#中操作SQLite数据库,我们通常会使用SQLite.Net这个开源库,它提供了很多便捷的操作方法。 在SQLite数据库中,事务(Transaction)是一组操作的集合,它们同步进行且被看作为一个单个的工作单元,要么都成功,要么…

    C# 2023年5月31日
    00
  • unity实现鼠标经过时ui及物体的变色操作

    实现鼠标经过时UI及物体的变色操作是Unity游戏开发中常见的操作之一,在以下内容中,我将详细讲解如何实现这个功能。 步骤一:添加事件触发器组件 首先,在需要变色的UI或物体上添加Event Trigger组件。在该组件下选择PointerEnter和PointerExit事件,并在事件右侧选择Add New。这样就可以添加新的触发事件。 在PointerE…

    C# 2023年6月3日
    00
  • 详解C#扩展方法原理及其使用

    当我们在编写C#代码的时候,有时候需要为一些类添加自定义的方法,这时候我们就可以使用扩展方法来实现这一功能。扩展方法在C#中的使用非常常见,但是很多人并不理解其实现原理及其使用方法。本文将详细讲解C#扩展方法原理及其使用方法,帮助大家更好地理解和使用扩展方法。 什么是扩展方法 扩展方法是C#2.0及以后版本中引入的概念,它允许我们为已有的类型添加自定义方法。…

    C# 2023年6月7日
    00
  • ASP.NET Core Web资源打包与压缩技术介绍

    在ASP.NET Core中,可以使用Web资源打包和压缩技术来提高Web应用程序的性能和加载速度。本文将介绍ASP.NET Core Web资源打包和压缩技术的完整攻略。 步骤 步骤1:安装Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation包 首先,需要安装Microsoft.AspNetCore.Mvc.R…

    C# 2023年5月17日
    00
  • C#中explicit与implicit的深入理解

    C#中的explicit(显式转换)和implicit(隐式转换)主要是用来进行类型转换的。下面我将详细讲解这两种类型转换的深入理解以及使用示例。 显式转换 explicit 显式转换也就是强制类型转换,可以将整型强制转换为浮点型,或者可以将长整型转换为整型等等。显式转换需要使用类型转换运算符,可以直接把一个数据类型转换成另外一个数据类型,但如果转换时发生精…

    C# 2023年5月15日
    00
  • WPF开发之实现一种三轴机械手控件

    WPF开发之实现一种三轴机械手控件,涉及到的技术栈有WPF、XAML、C#等。下面按照步骤来介绍实现这种控件的攻略。 一、设计控件的外观 首先我们需要考虑机械手控件的外观设计,我们可以使用WPF提供的绘图功能,来绘制出控件的外观,比如:机械臂的手臂、手掌、手指等。 在WPF开发中,我们设计控件的外观采用的是XAML,XAML是一种基于XML的标记语言,可以在…

    C# 2023年6月6日
    00
  • C#根据身份证号码判断出生日期和性别

    C# 根据身份证号码判断出生日期和性别 步骤1:获取身份证号码的输入 在 C# 中,我们可以通过 Console.ReadLine() 方法获取用户输入的身份证号码。示例代码如下: Console.WriteLine("请输入身份证号码:"); string idCard = Console.ReadLine(); 步骤2:校验身份证号码…

    C# 2023年6月1日
    00
合作推广
合作推广
分享本页
返回顶部