c# 从百度图片更新地址(更新中)

感觉换壁纸是一件麻烦的事情,正好最近又在学习c#,就随便做了一个东西,新手有多多的不足望见谅。(改进中)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.IO;
using System.Runtime.InteropServices;

namespace GetWebHtml
{

    class Program
    {

        [DllImport("user32.dll", EntryPoint = "SystemParametersInfo")]
        public static extern int SystemParametersInfo(
            int uAction,
            int uParam,
            string lpvParam,
            int fuWinIni
            );

        public static readonly string _path = "d:\\ouput.html";
        public static int _width = 1920, _height = 1080;

        static string GetKeyWord()
        {
            if (!File.Exists("KeyWord"))
                File.Create("KeyWord").Close();

            StreamReader sr = new StreamReader("KeyWord");

            string str = "";
            string data = "";
            while ((str = sr.ReadLine()) != null)
            {
                data += str + "\n";
            }

            if (data == "")
            {
                Console.WriteLine("没有关键词");
                Environment.Exit(0);
            }
            var datas = data.Split(‘\n‘);
            sr.Close();
            return datas[new Random().Next(0, datas.Length - 1)];
        }

        static string[] GetPicURl(string strs)
        {
            var datas = strs.Split(new string[] { "\"objURL\":" }, System.StringSplitOptions.RemoveEmptyEntries);

            int start = 0, end = 0;
            for (int i = 1; i < datas.Length; i++)
            {
                start = datas[i].IndexOf("\"") + "\"".Length;
                end = datas[i].IndexOf("\",");
                datas[i] = datas[i].Substring(start, end - start);
            }
            return datas;
        }

        static void Main(string[] args)
        {
            if (!File.Exists("IMGResolution"))
                File.Create("IMGResolution").Close();
            StreamReader sr = new StreamReader("IMGResolution");
            string msg = sr.ReadLine();
            if (msg.Split(‘,‘).Length == 2)
            {
                _width = Int32.Parse(msg.Split(‘,‘)[0]);
                _height = Int32.Parse(msg.Split(‘,‘)[1]);
            }
            sr.Close();

            try
            {

                WebClient MyWebClient = new WebClient();

                MyWebClient.Credentials = CredentialCache.DefaultCredentials;//获取或设置用于向Internet资源的请求进行身份验证的网络凭据

                Byte[] pageData = MyWebClient.DownloadData("http://image.baidu.com/search/index?ct=&z=&tn=baiduimage&ipn=r&word=" + GetKeyWord() + "&pn=0&ie=utf-8&oe=utf-8&cl=&lm=-1&fr=&se=&sme=&width=" + _width + "&height=" + _height); //从指定网站下载数据

                // string pageHtml = Encoding.Default.GetString(pageData);  //如果获取网站页面采用的是GB2312,则使用这句            

                string pageHtml = Encoding.UTF8.GetString(pageData); //如果获取网站页面采用的是UTF-8,则使用这句

                //Console.WriteLine(pageHtml);//在控制台输入获取的内容

                /*
                if (!File.Exists(_path))
                    File.Create(_path);

                using (StreamWriter sw = new StreamWriter(_path, false))//将获取的内容写入文本
                {

                    sw.Write(pageHtml);
                    sw.Close();

                }
                */

                if (!Directory.Exists("C:\\Users\\xiaoke\\Pictures\\ダウンロード ピクチャ\\"))
                    Directory.CreateDirectory("C:\\Users\\xiaoke\\Pictures\\ダウンロード ピクチャ\\");
                while (true)
                {
                    var strs = GetPicURl(pageHtml);
                    Random ram = new Random();
                    string URL = strs[ram.Next(1, strs.Length)];
                    string fileName = "C:\\Users\\xiaoke\\Pictures\\ダウンロード ピクチャ\\" + URL.Substring(URL.LastIndexOf("/"));

                    try
                    {
                        if (!File.Exists(fileName))
                        {
                            File.Create(fileName).Close();
                            MyWebClient.DownloadFile(URL, fileName);
                            SystemParametersInfo(20, 0, fileName, 0x1);
                        }
                    }
                    catch (SystemException s)
                    {
                        continue;
                    }
                    break;

                }

            }

            catch (WebException webEx)
            {

                Console.WriteLine(webEx.Message.ToString());

            }

        }

    }
}

有几点要注意的东西,我以前写代码也遇到过,但是没有做过笔记,所以就忘记了,又要自己重新试一次,所以做笔记好重要啊。

start = datas[i].IndexOf("\"") + "\"".Length;
end = datas[i].IndexOf("\",");
datas[i] = datas[i].Substring(start, end - start);

一般Substring()的函数都是传递开始位置和从开始到结束的数量。这里所值得注意的是start是用IndexOf()方法获取的,所以start的位置是在第一个关键字符串的位置,那么如果我们想要从这个字符串之后一位开始的时候就要把位置调整至字符串最后一个字符,所以我加了字符串的长度。知道开始和结束了,那么开始位置和从开始到结束的数量作差就好。
下载百度图片html发现搜索图片存放在"objURL":标记后面的地址里,所以这里将所有信息都以"objURL":字符串来拆分。
经过我的观察发现百度网址的规律如下: http://image.baidu.com/search/index?ct=&z=&tn=baiduimage&ipn=r&word=" + 查询关键字 + "&pn=0&ie=utf-8&oe=utf-8&cl=&lm=-1&fr=&se=&sme=&width=" + 宽像素 + "&height=" + 高像素

所以根据关键字来查询想要的结果。

还有一个要注意的是File.Create()创建文件后会返回一个流,如果不关闭这个流,文件将一直被占用。

别在意日文,我的电脑就是日文系统的,为了不让风格突转,我依旧用了日文命名。

根目录获KeyWord文件中取关键字,换行符隔开,随机选取一个。分辨率在根目录IMGResolution中设置,不自动获取,因为很多电脑的分辨率是很难匹配的。
 
时间: 2024-10-09 14:49:07

c# 从百度图片更新地址(更新中)的相关文章

百度图片小爬虫

刚学习爬虫,写了一个百度图片爬虫当作练习. 环境:python3.6(请下好第三方库requests) 实现的功能:输入关键字,下载240张关键字有关的百度图片到本地的d:\百度图片\关键字\文件夹中. 百度图片的加载是ajax异步形式的,除了前面的一部分图片,后面靠下拉加载的图片都是异步从服务器端请求得到的.这些异步加载的图片的信息可以在一个个acjson的百度图片接口中,可以在开发者工具中xhr下找到这些文件. 接下来上代码: import requestsimport reimport o

WPF中动态更新TextBlock文字中的超链接,文本

1.------------------------------------------------------------------------- 修改超链接的文本文字: <TextBlock><Hyperlink> <TextBlock  x:Name="TextBlockNeedChange" Text="改变的文本" /> </Hyperlink></TextBlock> 修改TextBlockN

3月12日-3月13日百度有了大幅更新,不幸排名下降了很多

昨日百度有了大幅更新.不幸的是站的排名有了很大的下滑. 关键词是配资 股票配资.域名:www.ya-jing.cn 配资公司还好. 总结一下: 1.公司站的内容长久没有更新了.对于配资这种知识类属性的词指定下滑. 2. 百度更加注重体验了,排名上去的新站更侧重实用性和简洁性,不是所谓的内容堆积. 3. 工作精力或者重点应该放在用户体验上了.这是核心了. www.dlnulib.com 周公解梦 这个站的收录也正常了,上次被人攻击导致了很多垃圾的内容.现在回归正常了,但是很多其他的正常内容也中枪了

验证码在后台的编写,并实现点击验证码图片时时发生更新

验证码在软件中的地位越来越重要,有效防止这种问题对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试:下面就是实现验证码的基本步骤: 1.在MVC框架中,则需添加一个控制器,代码如下 前端页面代码也简单,在index添加一个视图即可 最后在运行时展示的是这样的一个页面,而且点击图片会实现更新验证码的功能

Pads Layout 笔记--PADS中修改了封装库后怎样才能更新到PCB中

https://blog.csdn.net/xqhrs232/article/details/13507543 2种方法:1:在PCB中进入ECO模式-选择要更新的元件-点击change component图标-(选中元件后)右键点击元件-在弹出的菜单中选择libraby browse-勾选update part type from library (已实践) 2. 从logic原理图来更新PCB打开原理图,选中要变更的元件,分配好要变更的PCB封装tools-PADS Layout...点击p

百度快照迟迟不更新的原因及解决方法

最近梦瑶的济南网站建设遇到了快照回档的现象,每天都及时的更新了,网站也没有出什么问题,但是百度快照就是不更新,这让我心里有些担忧.遇到网站的百度快照更新不及时,相信许多seoer都遇到过这样的情况,这真的是一件让人抓狂的事情.那到底是什么原因导致的呢?有什么好的解决方法吗?下面是济南网站建设梦瑶花了不少时间问高手,查资料为大家分析的出现快照停滞的原因,并谈一下几种可行的解决方法. 一.原因分析 出现快照停滞的原因,济南网站建设梦瑶总结大体有以下几方面的原因: 第一:服务器不稳定.服务器动辄就出现

ASP.NET/C#获取文章中图片的地址

前几天修改一个网站的布局的时候需要把简单的新闻列表修改为图文结合+新闻列表,不过这新闻的数据库非常简单,图片是在编辑器里面和HTML一起存入数据库中的content字段的,所以工作简化到从一个字符串里面获取图片的地址并输出.在HTML的图片标签一般如下格式所示:<img src="" alt="" title="" width="" height="" />,这就相当于编程中的一个结构体啊,里面

Chrome: Stylish 在百度上不能自动更新

先上两张图: 如此华丽的效果居然不能自动应用,果然我大天朝诸事不顺,人家Google就没那么多事…… 坑:设置完Stylish后,百度搜索页需要手动刷新一次才能显示效果. 解决方法:安装TamperMonkey,添加 “Baidu x Stylish Fix” https://greasyfork.org/scripts/175-baidu-x-stylish-fix/code/Baidu%20x%20Stylish%20Fix.user.js;和 “百度搜索Stylish样式修复”  http

lock(1)——创建及更新表过程中SQL SERVER锁资源分配情况

锁应该说是由关系型数据库ACID(Atomicity,Consistency,Isolation,Durability)特性而引出的. 以下将测试在创建及更新表过程中SQL Server锁资源分配情况 获取当前会话的事务隔离级别:DBCC USEROPTIONS 测试环境:SQL SERVER 2008 R2 read committed隔离级别下 创建表 当我们只是打开一个SSMS查询窗口,选择数据库为master和tempdb时,没有任何锁产生,当我选择其他数据库,sql server就会在