c# HtmlDocument返回网页源码

c# HtmlDocument返回网页源码,第1张

我这里有源代码,

using System;

using SystemCollectionsGeneric;

using SystemComponentModel;

using SystemData;

using SystemDrawing;

using SystemLinq;

using SystemText;

using SystemWindowsForms;

using SystemTextRegularExpressions;

using SystemNet;

namespace DownPic

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

private static Int64 i = 0;

public static string[] GetHtmlImageUrlList(string sHtmlText)

{

// 定义正则表达式用来匹配 img 标签

Regex regImg = new Regex(@"<img\b[^<>]\bsrc[\s\t\r\n]=[\s\t\r\n][""'][\s\t\r\n](<imgUrl>[^\s\t\r\n""'<>])[^<>]/[\s\t\r\n]>", RegexOptionsIgnoreCase);

// 搜索匹配的字符串

MatchCollection matches = regImgMatches(sHtmlText);

// int i = 0;

string[] sUrlList = new string[matchesCount];

// 取得匹配项列表

foreach (Match match in matches)

sUrlList[i++] = matchGroups["imgUrl"]Value;

return sUrlList;

}

private void button1_Click(object sender, EventArgs e)

{

if (folderBrowserDialog_CShowDialog() == DialogResultOK)

{

textBox_CText = folderBrowserDialog_CSelectedPath;

if (textBox_CTextLength > 3)

{

textBox_CText = textBox_CText + "\\";

}

}

}

private string result = null;

private string style()

{

string choose = null;

if (radioButton_jpgChecked)

{

choose = radioButton_jpgText;

}

else if (radioButton_pngChecked)

{

choose = radioButton_pngText;

}

return ""+choose;

}

private static Int64 k = 1;

private void button2_Click(object sender, EventArgs e)

{

try

{

WebClient client = new WebClient();

clientEncoding = SystemTextASCIIEncodingUTF8;

result = clientDownloadString(textBox_urlText);

}

catch (Exception ex)

{

MessageBoxShow("请输入地址!","警告", MessageBoxButtonsOK, MessageBoxIconWarning);

}

richTextBox_resourceText = result;

try

{

Regex regImg = new Regex(@"<img[^>]+src=\s(:'(<target>[^']+)'|""(<target>[^""]+)""|(<target>[^>\s]+))\s[^>]>", RegexOptionsIgnoreCase);

string[] s = GetHtmlImageUrlList(result);

string[] filepath = new string[sLength];

for (Int64 j = 0; j < sLength; j++,k++)

{

filepath[j] = @textBox_CText + k + style();

}

WebClient mywebclient = new WebClient();

for (Int64 i = 0; i < sLength; i++)

{

mywebclientDownloadFile(s[i], filepath[i]);

}

if (Form1i == 0)

{

MessageBoxShow("此网站无链接!", "提示", MessageBoxButtonsOK, MessageBoxIconInformation);

}

else

{

MessageBoxShow("下载成功,总数为 " + Form1i + " 张", "提示", MessageBoxButtonsOK, MessageBoxIconNone);

}

}

catch (Exception ex)

{

MessageBoxShow(exMessage);

// Form1i++;

}

}

private void textBox_url_TextChanged(object sender, EventArgs e)

{

label_urlShowText = textBox_urlText;

}

}

}

里面就有你想要的下载源码功能,这是我以前想要下载网站时候写的,不过有点问题,但是完全可以正确获取网站源码,希望能帮到你

<script type="text/javascript">

function getQueryString(name) {

    var reg = new RegExp("(^|&)" + name + "=([^&])(&|$)", "i");

    var r = windowlocationsearchsubstr(1)match(reg);

    if (r != null) return unescape(r[2]); return null;

}

//例如你响取得url中的id,然后在js把id这个变量放到你想放置的地方

var id = getQueryString('id');

//alert(id);

//拼装字符串的时候加进去即可 'mp3/' + id + 'mp4 type="video/mp4"'

</script>

用jquery的一种解决方法:例子如下:

testhtml:(注意,这里任何html页面都可以用,我只是在这里面加了个div

<div id='gettag'></div>,用来显示信息。jqueryjs可以在jquery上下载到,改下名字就可以,地址:>

思路:根据标签名称获取所有span对象,然后根据类名筛选出目标对象,最后使用 innerHTML 属性获取文本。实例演示如下:

1、HTML结构

<span class="xing">姓氏</span>

<span class="name">名字</span>

<span class="sheng">籍贯</span> <br>

<input type='button' value='获取class=name的span' onClick="fun()"/>

2、javascript代码

function fun(){

obj = documentgetElementsByTagName("span");

class_name = "name";

for(i in obj){

if(obj[i]className == class_name){

alert(obj[i]innerHTML);

return

}

}

}

3、效果演示

不知道理解的对不对,如果你的javascript最终用浏览器或者浏览器内核程序去解析,那么直接在js中写document就可以,如果用其他程序解析javascript那么需要扩展其程序支持document,遵循w3c,文档对象模型DOM,document在js中无非也是一个对象,由一些属性组成。如果你在后端想获取类似document对象的内容,那需要自定义其属性并解析获取的html源码,做对应实现。

IHTMLDocument2有个方法:HRESULT get_frames(IHTMLFramesCollection2 p)

原来我以为通过该方法可以得到网页内嵌框架的IHTMLDocument2接口,但试过不行!

后来找到一种方法,即通过IOleContainer接口的EnumObjects方法。代码如下:

void EnumFrame( IHTMLDocment2 pHTML )

{

CComQIPtr<IOleContainer> spContainer( pHTML );

if( spContainer )

{

CComPtr<IEnumUnknown> spEnumerator;

// 注:参数OLECONTF_EMBEDDINGS

// 表示列举容器内的所有嵌入对象

HRESULT hr = spContainer->EnumObjects(

OLECONTF_EMBEDDINGS, &spEnumerator);

if( spEnumerator )

{

CComPtr<IUnknown> spUnk;

ULONG uFetched;

while (spEnumerator->Next(1, &spUnk, &uFetched) == S_OK)

{

CComQIPtr<IWebBrowser2, &IID_IWebBrowser2> spWB(spUnk);

if ( spWB )

{

ASSERT( spWB != m_spWebBrowser2 ) ;

CComPtr<IDispatch> spDocDisp;

hr = spWB->get_Document(&spDocDisp);

CComQIPtr<IHTMLDocument2> spHTML (spDocDisp) ;

if( spHTML )

{

EnumFrame( spHTML );

}}}}}

以上就是关于c# HtmlDocument返回网页源码全部的内容,包括:c# HtmlDocument返回网页源码、js获取地址栏参数document.getElementById("").innerHTML、如何提取显示一个html文档所有的标签,id值,class值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9335383.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存