开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 551|回复: 10
收起左侧

[其它源码] [我的爬虫日记03]C#爬取豆瓣TOP250

[复制链接]
发表于 2024-10-31 21:27:46 | 显示全部楼层 |阅读模式   辽宁省沈阳市
分享源码
界面截图:
是否带模块: 纯源码
备注说明: -
[C#] 纯文本查看 复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Policy;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using MyLib.HttpHelper;
using MyLib.TextHelper;

namespace 爬虫豆瓣Top250
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("程序开始运行...");


            var url_list = Get全部影片详情页链接("https://movie.douban.com/top250");

            foreach (var url in url_list)
            {
                Get影片信息And写到文件(url);
                Thread.Sleep(1000);
            }

            Console.WriteLine("任务已全部完成!");
            Console.ReadKey();
        }

        static List<string> Get全部影片详情页链接(string url)
        {
            var headers = new Dictionary<string, string>() {
                {"user-agent" ,"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0"},
            };

            List<string> url_all_list = new List<string>();

            int i = 0;
            while (i < 250)
            {
                var ret = HttpHelper.HttpGetData(url + "?start=" + i, headers);

                // 获取网页源码
                var html = ret.Result;

                // 获取中间链接列表数据
                var left_grid_view = @"<ol class=""grid_view"">";
                var right_grid_view = @"</ol>";
                var grid_view_str = TextHelper.GetMidText(html, left_grid_view, right_grid_view);
                var url_list = ExtractUniqueUrls(grid_view_str);

                foreach (var u in url_list)
                {
                    url_all_list.Add(u);
                }


                i += 25;
                Thread.Sleep(500);
            }

            return url_all_list;
        }

        static List<string> ExtractUniqueUrls(string html)
        {
            List<string> urls = new List<string>();
            MatchCollection matches = Regex.Matches(html, @"<a.*?href=""(.*?)"".*?>");
            foreach (Match match in matches)
            {
                if (match.Groups.Count > 1)
                {
                    string url = match.Groups[1].Value;
                    if (!urls.Contains(url))
                    {
                        urls.Add(url);
                    }
                }
            }
            return urls;
        }


        static void Get影片信息And写到文件(string url)
        {
            var headers = new Dictionary<string, string>() {
                {"user-agent" ,"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0"},
            };

            var ret = HttpHelper.HttpGetData(url, headers);
            var html = ret.Result;

            var left_电影名 = @"<span property=""v:itemreviewed"">";
            var right_电影名 = @"</span>";
            var 电影名 = TextHelper.GetMidText(html, left_电影名, right_电影名);

            var left_年份 = @"<span class=""year"">(";
            var right_年份 = @")</span>";
            var 年份 = TextHelper.GetMidText(html, left_年份, right_年份);

            var left_导演 = @"rel=""v:directedBy"">";
            var right_导演 = @"</a>";
            var 导演 = TextHelper.GetMidText(html, left_导演, right_导演);

            var left_主演 = @"rel=""v:starring"">";
            var right_主演 = @"</a>";
            var zy_list = TextHelper.GetMidTextBatch(html, left_主演, right_主演);
            var 主演 = "";
            for (int i = 0; i < 3; i++)
            {
                主演 += zy_list + "/";
            }

            var left_类型 = @"property=""v:genre"">";
            var right_类型 = @"</span>";
            var lx_list = TextHelper.GetMidTextBatch(html, left_类型, right_类型);
            var 类型 = "";
            foreach (var lx in lx_list)
            {
                类型 += lx + "/";
            }

            var left_地区 = @"<span class=""pl"">制片国家/地区:</span>";
            var right_地区 = @"<br/>";
            var 地区 = TextHelper.GetMidText(html, left_地区, right_地区);

            var left_语言 = @"语言:</span>";
            var right_语言 = @"<br/>";
            var 语言 = TextHelper.GetMidText(html, left_语言, right_语言);

            var left_评分 = @"<strong class=""ll rating_num"" property=""v:average"">";
            var right_评分 = @"</strong>";
            var 评分 = TextHelper.GetMidText(html, left_评分, right_评分);


            Console.WriteLine("***************************影片信息***************************");
            Console.WriteLine("电影名:" + 电影名);
            Console.WriteLine("年份:" + 年份);
            Console.WriteLine("导演:" + 导演);
            Console.WriteLine("主演:" + 主演);
            Console.WriteLine("类型:" + 类型);
            Console.WriteLine("地区:" + 地区);
            Console.WriteLine("语言:" + 语言);
            Console.WriteLine("评分:" + 评分);

            var app_path = System.AppDomain.CurrentDomain.BaseDirectory;
            TextHelper.AppendToTxtFile(app_path + "download\\豆瓣.txt", "***************************影片信息***************************");
            TextHelper.AppendToTxtFile(app_path + "download\\豆瓣.txt", "电影名:" + 电影名);
            TextHelper.AppendToTxtFile(app_path + "download\\豆瓣.txt", "年份:" + 年份);
            TextHelper.AppendToTxtFile(app_path + "download\\豆瓣.txt", "导演:" + 导演);
            TextHelper.AppendToTxtFile(app_path + "download\\豆瓣.txt", "主演:" + 主演);
            TextHelper.AppendToTxtFile(app_path + "download\\豆瓣.txt", "类型:" + 类型);
            TextHelper.AppendToTxtFile(app_path + "download\\豆瓣.txt", "地区:" + 地区);
            TextHelper.AppendToTxtFile(app_path + "download\\豆瓣.txt", "语言:" + 语言);
            TextHelper.AppendToTxtFile(app_path + "download\\豆瓣.txt", "评分:" + 评分);

            Console.WriteLine("写入完成");
        }
    }
}


爬虫豆瓣Top250.rar (71.03 KB, 下载次数: 4)

评分

参与人数 2精币 +2 收起 理由
wa690602724 + 1 感谢分享,很给力!~
多多帅吧 + 1 此处应该有鼓励~

查看全部评分


签到天数: 9 天

发表于 2024-12-4 05:49:11 | 显示全部楼层   北京市北京市
感谢分享,很给力!~
回复 支持 反对

使用道具 举报

签到天数: 20 天

发表于 2024-11-4 11:15:36 | 显示全部楼层   重庆市重庆市
收藏了,支持
回复 支持 反对

使用道具 举报

发表于 2024-11-1 14:33:15 | 显示全部楼层   俄罗斯
支持开源~!感谢分享
回复 支持 反对

使用道具 举报

结帖率:0% (0/2)

签到天数: 16 天

发表于 2024-11-1 09:24:18 | 显示全部楼层   广西壮族自治区玉林市
感谢分享
回复 支持 反对

使用道具 举报

结帖率:33% (1/3)

签到天数: 3 天

发表于 2024-11-1 08:17:38 | 显示全部楼层   四川省成都市
感谢分享!!!!
回复 支持 反对

使用道具 举报

结帖率:100% (4/4)

签到天数: 25 天

发表于 2024-11-1 07:59:21 | 显示全部楼层   山东省淄博市
感谢分享
回复 支持 反对

使用道具 举报

结帖率:90% (18/20)
发表于 2024-11-1 07:59:03 | 显示全部楼层   安徽省芜湖市
感谢分享,很给力!~
回复 支持 反对

使用道具 举报

结帖率:100% (2/2)

签到天数: 15 天

发表于 2024-11-1 07:03:11 | 显示全部楼层   广东省深圳市
学习一下
回复 支持 反对

使用道具 举报

结帖率:50% (7/14)

签到天数: 25 天

发表于 2024-11-1 00:37:41 | 显示全部楼层   湖南省长沙市

支持开源~!感谢分享
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表