.NET爬取美图官网首页数据实战

这篇具有很好参考价值的文章主要介绍了.NET爬取美图官网首页数据实战。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:

  在当今信息化社会,网络数据分析越来越受到重视。而作为开发人员,掌握一门能够抓取网页内容的语言显得尤为重要。在此篇文章中,将分享如何使用 .NET构建网络抓取工具。详细了解如何执行 HTTP 请求来下载要抓取的网页,然后从其 DOM 树中选择 HTML 元素,进行匹配需要的字段信息,从中提取数据。

一、准备工作:

创建项目:

​ 创建一个简单的Winfrom客户端程序,我使用的是.NET 5.0框架。为使项目显得条理清晰,此处进行了项目分层搭建项目,也就是多建立几个几个类库罢了,然后进行引用。

项目结构:
.NET爬取美图官网首页数据实战

客户端界面设计:

.NET爬取美图官网首页数据实战

NuGet添加引用类库HtmlAgilityPack:

HtmlAgilityPack是一个开源的C#库,它允许你解析HTML文档,从公DOM中选择元素并提取数据。该工具基本上提供了抓取静态内容网站所需要的一切。这是一个敏捷的HTML解析器,它构建了一个读和写DOM,并支持普通的XPATH或XSLT,你实际上不必了解XPATH也不必了解XSLT就可以使用它。它是一个.NET代码库,允许你解析“Web外”的HTML文件。解析器对“真实世界”中格式错误的HTML非常宽容。对象模型与System.Xml非常相似,但适用于HTML文档或流。

NuGet安装引用:

dotnet add package HtmlAgilityPack --version 1.11.51

二、实现核心代码:

设计定义实体:

网站爬取信息:
.NET爬取美图官网首页数据实战

爬取信息实体定义:根据美图的首页展示的信息分析,进行定义爬取字段的信息,定义如下:

#region << 版 本 注 释 >>
/*----------------------------------------------------------------
 * 创建者:码农阿亮
 * 创建时间:2023/8/4 9:58:03
 * 版本:V1.0.0
 * 描述:
 *
 * ----------------------------------------------------------------
 * 修改人:
 * 时间:
 * 修改说明:
 *
 * 版本:V1.0.1
 *----------------------------------------------------------------*/
#endregion << 版 本 注 释 >>

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace CrawlerModel.Meitu
{

    /// <summary>
    ///  爬取的专区字段实体
    /// </summary>
    public class BeautyZone
    {

        /// <summary>
        /// 专区标题
        /// </summary>
        public string Tittle { get; set; }
        /// <summary>
        /// 专区每种类型美女排行榜
        /// </summary>
        public List<EveryCategoryBeautyTop> categoryBeauties { get; set; }

    }

    /// <summary>
    ///  每分类美女排行榜
    /// </summary>
    public class EveryCategoryBeautyTop
    {
        /// <summary>
        /// 类别
        /// </summary>
         public string Category { get; set; }
        /// <summary>
        /// 每种类型排行榜
        /// </summary>
        public List<Beauty> beauties { get; set; }
        
    }

    /// <summary>
    /// 美女排行信息
    /// </summary>
    public  class Beauty
    {
        /// <summary>
        /// 排行
        /// </summary>
        public string  No { get; set; }
        /// <summary>
        /// 姓名
        /// </summary>
        public  string Name { get; set; }
        /// <summary>
        /// 热度
        /// </summary>
        public string  Popularity { get; set; }
        /// <summary>
        /// 图片地址
        /// </summary>
        public string ImageUrl { get; set; }
    }
}

更新UI界面实体定义:根据客户端需要展示的界面,定义如下:

#region << 版 本 注 释 >>
/*----------------------------------------------------------------
 * 创建者:码农阿亮
 * 创建时间:2023/8/04 16:42:12
 * 版本:V1.0.0
 * 描述:
 *
 * ----------------------------------------------------------------
 * 修改人:
 * 时间:
 * 修改说明:
 *
 * 版本:V1.0.1
 *----------------------------------------------------------------*/
#endregion << 版 本 注 释 >>

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace CrawlerModel.Meitu
{
    /// <summary>
    /// UpdateUIModel 更新UI界面需要的字段
    /// </summary>
    public class UpdateUIModel
    {
        /// <summary>
        /// 下载的数量
        /// </summary>
        public int DownloadNumber { get; set; }
        /// <summary>
        /// 分类
        /// </summary>
        public string Category { get; set; }
        /// <summary>
        /// 美女写真实体
        /// </summary>
        public Beauty beauty =new Beauty();
        

    }
}


匹配DOM标签常量实体: 定义如下:

#region << 版 本 注 释 >>
/*----------------------------------------------------------------
 * 创建者:码农阿亮
 * 创建时间:2023/8/4 10:08:06
 * 版本:V1.0.0
 * 描述:
 *
 * ----------------------------------------------------------------
 * 修改人:
 * 时间:
 * 修改说明:
 *
 * 版本:V1.0.1
 *----------------------------------------------------------------*/
#endregion << 版 本 注 释 >>

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace CrawlerModel.Meitu
{
    /// <summary>
    /// MeituConfig DOM标签常量
    /// </summary>
    public class MeituConfig
    {
        /// <summary>
        /// 存放数据地址
        /// </summary>
        public const string JsonDataPath = "meitu/data";
        /// <summary>
        /// 爬取美图首页地址
        /// </summary>
        public const string Url = "https://www.meitu131.com";
        /// <summary>
        /// 专区XPath
        /// </summary>
        public const string ZoneXPath = @"/html/body/div[10]/div[2]/div";
        /// <summary>
        /// 专区名称XPath
        /// </summary>
        public const string ZoneNameXPath = @"/html/body/div[10]/div[1]/ul/li";
        /// <summary>
        /// 排行榜
        /// </summary>
        public const string TopXPath = @"/html/body/div[10]/div[2]/div[{0}]/dl";
        /// <summary>
        /// 人员隶属种类
        /// </summary>
        public const string PersonCategoryXPath = @"/html/body/div[10]/div[2]/div[{0}]/dl/dt";
        /// <summary>
        /// 人员
        /// </summary>
        public const string PersonXPath = @"/html/body/div[10]/div[2]/div[{0}]/dl/dd";
        /// <summary>
        /// 排行
        /// </summary>
        public const string NoXPath = @"/html/body/div[3]/div[1]/ul/li";
        /// <summary>
        /// 姓名
        /// </summary>
        public const string NameXPath = @"/html/body/div[3]/div[1]/ul/li";
        /// <summary>
        /// 热度
        /// </summary>
        public const string PopularityXPath = @"/html/body/div[3]/div[1]/ul/li";
        /// <summary>
        /// 图片地址
        /// </summary>
        public const string ImageUrlXPath = @"/html/body/div[3]/div[1]/ul/li";

    }
}

业务实现代码:

帮助类:Web请求和下载资源帮助方法,定义义如下:

#region << 版 本 注 释 >>
/*----------------------------------------------------------------
 * 创建者:码农阿亮
 * 创建时间:2023/8/4 10:04:16
 * 版本:V1.0.0
 * 描述:
 *
 * ----------------------------------------------------------------
 * 修改人:
 * 时间:
 * 修改说明:
 *
 * 版本:V1.0.1
 *----------------------------------------------------------------*/
#endregion << 版 本 注 释 >>
using HtmlAgilityPack;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

namespace CrawlerService.Helper
{

  /// <summary>
  /// 创建一个Web请求
  /// </summary>
   public class MyWebClient : WebClient
    {
        protected override WebRequest GetWebRequest(Uri address)
        {
            HttpWebRequest request = base.GetWebRequest(address) as HttpWebRequest;
            request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
            return request;
        }
    }
    /// <summary>
    /// 下载HTML帮助类
    /// </summary>
    public static class LoadHtmlHelper
    {
        /// <summary>
        /// 从Url地址下载页面
        /// </summary>
        /// <param name="url"></param>
        /// <returns></returns>
        public async static ValueTask<HtmlDocument> LoadHtmlFromUrlAsync(string url)
        {
            var data = new MyWebClient()?.DownloadString(url);
            var doc = new HtmlDocument();
            doc.LoadHtml(data);
            return doc;
        }

        /// <summary>
        /// 获取单个节点扩展方法
        /// </summary>
        /// <param name="htmlDocument">文档对象</param>
        /// <param name="xPath">xPath路径</param>
        /// <returns></returns>
        public static HtmlNode GetSingleNode(this HtmlDocument htmlDocument, string xPath)
        {
          return  htmlDocument?.DocumentNode?.SelectSingleNode(xPath);
        }

        /// <summary>
        /// 获取多个节点扩展方法
        /// </summary>
        /// <param name="htmlDocument">文档对象</param>
        /// <param name="xPath">xPath路径</param>
        /// <returns></returns>
        public static HtmlNodeCollection GetNodes(this HtmlDocument htmlDocument, string xPath)
        {
            return htmlDocument?.DocumentNode?.SelectNodes(xPath);
        }

     

        /// <summary>
        /// 获取多个节点扩展方法
        /// </summary>
        /// <param name="htmlDocument">文档对象</param>
        /// <param name="xPath">xPath路径</param>
        /// <returns></returns>
        public static HtmlNodeCollection GetNodes(this HtmlNode htmlNode, string xPath)
        {
            return htmlNode?.SelectNodes(xPath);
        }


        /// <summary>
        /// 获取单个节点扩展方法
        /// </summary>
        /// <param name="htmlDocument">文档对象</param>
        /// <param name="xPath">xPath路径</param>
        /// <returns></returns>
        public static HtmlNode GetSingleNode(this HtmlNode htmlNode, string xPath)
        {
            return htmlNode?.SelectSingleNode(xPath);
        }

        /// <summary>
        /// 下载图片
        /// </summary>
        /// <param name="url">地址</param>
        /// <param name="filpath">文件路径</param>
        /// <returns></returns>
        public async static ValueTask<bool> DownloadImg(string url ,string filpath)
        {
            HttpClient httpClient = new HttpClient();
            try
            {
                var bytes = await httpClient.GetByteArrayAsync(url);
                using (FileStream fs = File.Create(filpath))
                {
                    fs.Write(bytes, 0, bytes.Length);
                }
                return File.Exists(filpath);
            }
            catch (Exception ex)
            {
             
                throw new Exception("下载图片异常", ex);
            }
            
        }
    }
}

主要业务实现方法:定义如下:

#region << 版 本 注 释 >>
/*----------------------------------------------------------------
 * 创建者:码农阿亮
 * 创建时间:2023/8/4 10:07:17
 * 版本:V1.0.0
 * 描述:
 *
 * ----------------------------------------------------------------
 * 修改人:
 * 时间:
 * 修改说明:
 *
 * 版本:V1.0.1
 *----------------------------------------------------------------*/
#endregion << 版 本 注 释 >>

using CrawlerComm.Handler;
using CrawlerModel.Meitu;
using CrawlerService.Helper;
using HtmlAgilityPack;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace CrawlerService.Meitu
{
    /// <summary>
    /// MeituParseHtml 的摘要说明
    /// </summary>
    public class MeituParseHtmService
    {

        /// <summary>
        /// json数据文件夹存放文件夹位置
        /// </summary>
        private static string _dataDirectoryPath = Path.Combine(Directory.GetCurrentDirectory(), MeituConfig.JsonDataPath);

        /// <summary>
        /// 爬取json数据文件 
        /// </summary>
        private static string _CrawlerData = Path.Combine(_dataDirectoryPath, "categories.json");

        /// <summary>
        /// 开始爬取
        /// </summary>
        /// <returns></returns>
        public async Task StartAsync()
        {
            //专区集合
            List<BeautyZone> beautyZones = new List<BeautyZone>();
            //获取首页Html文档
            HtmlDocument htmlDocument = await LoadHtmlHelper.LoadHtmlFromUrlAsync(MeituConfig.Url);

            //创建存放数据的文件
            FileInfo fileInfo = new FileInfo(_CrawlerData);

            //获取到专区标签
            HtmlNodeCollection zoneHtmlNodes = htmlDocument.GetNodes(MeituConfig.ZoneXPath);
            //专区名称
            HtmlNodeCollection zoneNameHtmlNodes = htmlDocument.GetNodes(MeituConfig.ZoneNameXPath);

            if (zoneHtmlNodes != null && zoneHtmlNodes.Count> 0)
            {
                //专区个数
                var zoneCount = zoneHtmlNodes.Count;
                for (int i = 0; i < zoneCount; i++)
                {
                    //每个专区
                    BeautyZone beautyZone = new BeautyZone()
                    {
                        Tittle = zoneNameHtmlNodes[i].InnerText,
                        categoryBeauties = new List<EveryCategoryBeautyTop>()
                    };

                    HtmlNodeCollection topHtmlNodes = htmlDocument.GetNodes(string.Format( MeituConfig.TopXPath,i+1));
                    if (topHtmlNodes != null && topHtmlNodes.Count > 0)
                    {
                        //每个专区下所有分类
                        HtmlNodeCollection personCategoryHtmlNodes = htmlDocument.GetNodes(string.Format(MeituConfig.PersonCategoryXPath, i + 1));
                        //爬取所有人员的标签内容
                        HtmlNodeCollection personHtmlNodes = htmlDocument.GetNodes(string.Format(MeituConfig.PersonXPath, i + 1));

                        if (personCategoryHtmlNodes !=null && personHtmlNodes!=null  && personCategoryHtmlNodes.Count() > 0)
                        {

                            for (int j = 0; j < personCategoryHtmlNodes.Count(); j++)
                            {
                                //根据每个专区-分类下,进行遍历人气值人员排名
                                EveryCategoryBeautyTop everyCategoryBeautyTop = new EveryCategoryBeautyTop();
                                everyCategoryBeautyTop.Category = personCategoryHtmlNodes[j].InnerText;
                                everyCategoryBeautyTop.beauties = new List<Beauty>();
                                for (int k = 8*j; k < personHtmlNodes.Count(); k++)
                                {
                                    var child = personHtmlNodes[k];//每个美女对应的节点信息

                                    var i1 = child.GetSingleNode(child.XPath + "/i");//排名节点
                                    var img = child.GetSingleNode(child.XPath + "/a[1]/div[1]/img[1]");//姓名和图片地址
                                    var span2 = child.GetSingleNode(child.XPath + "/a[1]/div[2]/span[2]");//热度值
                                    //同一类别添加美女到集合
                                    everyCategoryBeautyTop.beauties.Add(new Beauty
                                    {
                                        No = i1.InnerText,
                                        Name = img.GetAttributeValue("alt", "未找到"),
                                        Popularity = span2.InnerText,
                                        ImageUrl = img.GetAttributeValue("data-echo", "未找到")
                                    }
                                    );
                                }
                                //将在同一分区内Top分类添加到集合
                                beautyZone.categoryBeauties.Add(everyCategoryBeautyTop);
                            }
                                    
                        }
                       
                    }
                    beautyZones.Add(beautyZone);
                }
                if (beautyZones.Count()> 0)
                {
                    //爬取数据转Json
                    string beautiesJsonData = JsonConvert.SerializeObject(beautyZones); ;
                    //写入爬取数据数据
                    string jsonFile = "beauties.json";
                    WriteData(jsonFile, beautiesJsonData);
                    //下载图片
                    DownloadImage(beautyZones);

                }
            }
        }

        /// <summary>
        /// 写入文件数据
        /// </summary>
        /// <param name="fileName"></param>
        /// <param name="data"></param>
        private void WriteData(string fileName, string data)
        {

            FileStream fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Write);
            StreamWriter sw = new StreamWriter(fs);
            try
            {
                sw.Write(data);
            }
            finally
            {
                if (sw != null)
                {
                    sw.Close();
                }
            }
        }
 
        /// <summary>
        /// 下载图片
        /// </summary>
        /// <param name="beautyZones"></param>
        private async void DownloadImage(List<BeautyZone> beautyZones)
        {
            int count = 0;
            foreach (var beautyZone in beautyZones)
            {
                string rootPath =  System.IO.Directory.GetCurrentDirectory() +"\\DownloadImg\\"+ beautyZone.Tittle;
                foreach (var category in beautyZone.categoryBeauties)
                {
                   string downloadPath = rootPath + "\\" + category.Category;
                    foreach (var beauty in category.beauties)
                    {
                        count += 1;//下载数量累加
                        string filePath = downloadPath + "\\" + beauty.Name+".jpg";
                        if (!Directory.Exists(downloadPath))
                        {
                            Directory.CreateDirectory(downloadPath);
                        }
                        UpdateUIModel updateUIModel = new UpdateUIModel()
                        {
                            DownloadNumber =count,
                            Category = category.Category,
                            beauty = beauty

                        };
                        //更新UI
                        UpdateFrmHandler.OnUpdateUI(updateUIModel);
                        //异步下载
                        await  LoadHtmlHelper.DownloadImg(beauty.ImageUrl,filePath);
                    }
                }
            }
        }
    }
}

定义委托代码:

更新UI界面的委托事件:定义如下:

#region << 版 本 注 释 >>
/*----------------------------------------------------------------
 * 创建者:码农阿亮
 * 创建时间:2023/8/04 11:28:24
 * 版本:V1.0.0
 * 描述:
 *
 * ----------------------------------------------------------------
 * 修改人:
 * 时间:
 * 修改说明:
 *
 * 版本:V1.0.1
 *----------------------------------------------------------------*/
#endregion << 版 本 注 释 >>

using CrawlerModel.Meitu;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace CrawlerComm.Handler
{
    /// <summary>
    /// UpdateFrmHandler 更新UI事件委托
    /// </summary>
    public class UpdateFrmHandler
    {
        /// <summary>
        /// 更新下载界面事件
        /// </summary>
        public static event EventHandler<UpdateUIModel> UpdateUI;
        public static void OnUpdateUI(UpdateUIModel updateUIModel)
        {
            UpdateUI?.Invoke(null, updateUIModel);
        }
    }
}

客户端执行代码:

点击触发事件:定义如下:

#region << 版 本 注 释 >>
/*----------------------------------------------------------------
 * 创建者:码农阿亮
 * 创建时间:2023/8/4 08:07:17
 * 版本:V1.0.0
 * 描述:
 *
 * ----------------------------------------------------------------
 * 修改人:
 * 时间:
 * 修改说明:
 *
 * 版本:V1.0.1
 *----------------------------------------------------------------*/
#endregion << 版 本 注 释 >>
using CrawlerComm.Handler;
using CrawlerModel.Meitu;
using CrawlerService.Meitu;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace CrawlerData
{
    public partial class FrmMain : Form
    {
        public FrmMain()
        {
            InitializeComponent();
            //订阅委托
            UpdateFrmHandler.UpdateUI += UpdateUIFuc;
        }

        /// <summary>
        /// 更新界面委托方法
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="updateUIModel"></param>
        private void UpdateUIFuc(object sender, UpdateUIModel updateUIModel )
        {
            try
            {

                //改变界面UI中的值
                this.Invoke((Action)delegate
                {
                    UpdateUIBiz(updateUIModel);
                });

            }
            catch (Exception ex)
            {
              
            }
        }
        /// <summary>
        /// 更新UI界面业务
        /// </summary>
        /// <param name="updateUIModel"></param>
        private void UpdateUIBiz(UpdateUIModel updateUIModel)
        {
            try
            {
                //分类
                tbCategory.Text = updateUIModel.Category;
                //排名
                tbNo.Text = updateUIModel.beauty.No;
                //姓名
                tbName.Text = updateUIModel.beauty.Name;
                //人气值
                tbPopularity.Text = updateUIModel.beauty.Popularity;
                //图片地址
                tbUrl.Text = updateUIModel.beauty.ImageUrl;
                //图片
                WebClient client = new WebClient();
                string imageUrl = updateUIModel.beauty.ImageUrl;// 要显示的网络图片的URL
                byte[] imageBytes = client.DownloadData(imageUrl);
                Image img = Image.FromStream(new MemoryStream(imageBytes));
                picBox.Image = img;
                //爬取数量
                lbNumber.Text = updateUIModel.DownloadNumber.ToString();
                
            }
            catch (Exception ex)
            {

            }
        }
        /// <summary>
        /// 开始执行按钮点击事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private  void btStart_Click(object sender, EventArgs e)
        {
            StartCrawler();
        }

        /// <summary>
        /// 开始爬取
        /// </summary>
        public async void StartCrawler()
        {
            try
            {
                MeituParseHtmService meituParseHtml = new MeituParseHtmService();
                await meituParseHtml.StartAsync();
            }
            catch (Exception ex )
            {

            }
        
        }
    }
}

三、爬取验证:

启动客户端:

文章上传图片大小有限制,只截取了部分gif:

.NET爬取美图官网首页数据实战

爬取的Json数据结果:

.NET爬取美图官网首页数据实战

下载的图片资源:

分目录层级存放:
.NET爬取美图官网首页数据实战

源码链接地址:

Gitee完整实例地址:

https://gitee.com/mingliang_it/CrawlerDataClient文章来源地址https://www.toymoban.com/news/detail-646701.html

到了这里,关于.NET爬取美图官网首页数据实战的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python爬虫实战(1)--爬取新闻数据

    想要每天看到新闻数据又不想占用太多时间去整理,萌生自己抓取新闻网站的想法。 使用python语言可以快速实现,调用 BeautifulSoup 包里面的方法 安装BeautifulSoup 完成以后引入项目 定义请求头,方便把请求包装成正常的用户请求,防止被拒绝 定义被抓取的url,并请求加上请求

    2024年02月13日
    浏览(57)
  • 首页以卡片形式来展示区块链列表数据(Web3项目一实战之五)

    我们已然在 Web3 分布式存储 IPFS(Web3项目一实战之四) 介绍了什么是 IPFS ,以及在本地电脑如何安装它。虽然在上一篇讲解了该怎么安装 IPFS ,也做了相应的配置,但在本地开发阶段,前端总是无法避免 跨域 这个远程请求 api 的”家常便饭的通病“。 很显然,对于出现 跨域

    2024年02月05日
    浏览(46)
  • Rx.NET in Action 中文介绍 前言及序言

    目标 可选方式 Rx 处理器(Operator) 创建 Observable Creating Observables 直接创建 By explicit logic Create Defer 根据范围创建 By specification Range Repeat Generate Timer Interval Return 使用预设 Predefined primitives Throw Never Empty 从其他类型创建 From other types FromEventPattern FromEvent FromTask FromAsync 变换 Transform

    2024年02月13日
    浏览(51)
  • Python实战:用Selenium爬取网页数据

    网络爬虫是Python编程中一个非常有用的技巧,它可以让您自动获取网页上的数据。在本文中,我们将介绍如何使用Selenium库来爬取网页数据,特别是那些需要模拟用户交互的动态网页。 Selenium是一个自动化测试工具,它可以模拟用户在浏览器中的操作,比如点击按钮、填写表

    2024年02月06日
    浏览(47)
  • 六个步骤学会使用Python爬虫爬取数据(爬虫爬取微博实战)

    用python的爬虫爬取数据真的很简单,只要掌握这六步就好,也不复杂。以前还以为爬虫很难,结果一上手,从初学到把东西爬下来,一个小时都不到就解决了。 第一步:安装requests库和BeautifulSoup库 在程序中两个库的书写是这样的: 由于我使用的是pycharm进行的python编程。所以

    2024年02月08日
    浏览(59)
  • Selenium实战案例之爬取js加密数据

    Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera,Edge等。这个工具的主要功能包括:测试与浏览器的兼容性——测试应用程序看是否能够很好得

    2024年02月07日
    浏览(52)
  • 〖Python网络爬虫实战㉕〗- Ajax数据爬取之Ajax 案例实战

    订阅:新手可以订阅我的其他专栏。免费阶段订阅量1000+                 python项目实战                  Python编程基础教程系列(零基础小白搬砖逆袭) 说明:本专栏持续更新中,目前专栏免费订阅,在转为付费专栏前订阅本专栏的,可以免费订阅付费专栏,

    2024年02月06日
    浏览(70)
  • Python爬虫实战——爬取新闻数据(简单的深度爬虫)

            又到了爬新闻的环节(好像学爬虫都要去爬爬新闻,没办法谁让新闻一般都很好爬呢XD,拿来练练手),只作为技术分享,这一次要的数据是分在了两个界面,所以试一下深度爬虫,不过是很简单的。  网页url 1.先看看网站网址的规律  发现这部分就是每一天的新闻

    2024年02月11日
    浏览(44)
  • Puppeteer 使用教程-实战篇(爬取图片、视频、音频,页面数据)

    目录 前言 一、 获取实体店铺信息 二、 获取全国各省市县地图json数据 三、 cookies 四、 获取网络图片、视频资源 五、 自动化测试 总结         续上篇,我们简单讲述一下puppeteer常见的应用场景,包括静态页面数据获取,网络请求获取截取、图片、视频资源下载、自动化

    2024年02月06日
    浏览(38)
  • Python爬虫实战:selenium爬取电商平台商品数据(1)

    def index_page(page): “”\\\" 抓取索引页 :param page: 页码 “”\\\" print(‘正在爬取第’, str(page), ‘页数据’) try: url = ‘https://search.jd.com/Search?keyword=iPhoneev=exbrand_Apple’ driver.get(url) if page 1: input = driver.find_element_by_xpath(‘//*[@id=“J_bottomPage”]/span[2]/input’) button = driver.find_element_by_xpath(‘

    2024年04月28日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包