C#Web scraper复制文本

时间:2015-05-12 06:37:17

标签: c# web-scraping webbrowser-control

我有一个用C#编写的Web scraper来提取数据。我想从Web浏览器控件中复制文本并以编程方式将其粘贴到Word文件中。当我尝试使用其ID和InnerText提取富文本框内容时,文本包含编码字符,如%2c。

我需要获取所有格式的文本,但我无法找到任何方式。我尝试了EncodingHTTPUtility.UrlDecodeSendKeyselem.InvokeMember()但没有成功。

如何以编程方式从Web浏览器控件中复制和粘贴文本以保留格式?

以下是要提取的示例数据:

描述

Advance Concepts Engineering团队设计和开发新车辆,以满足未来的法规要求和客户竞争要求。合格的候选人将负责整车的包装。当车辆转向生产时,候选人将识别并解决适应和包装问题。他们将领导与Systems& Co.合作的跨职能团队会议。组件,高级制造,服务等,以确保解决方案针对车辆生命周期的各个阶段进行优化。

HtmlElement elem = wb.Document.GetElementById("ctl00_contplhDynamic_txtDescrContentHiddenTextarea");
                if (elem == null) return;
                elem.InvokeMember("Click");
                //elem.InvokeMember("Select All");
                //elem.InvokeMember("Copy");
                SendKeys.SendWait("^a");
                SendKeys.SendWait("^c");

                Clipboard.Clear();
                elem.Focus();
                elem.InvokeMember("Right Click");
                elem.InvokeMember("Select All");
                elem.InvokeMember("Copy");

                Clipboard.SetText(elem.InnerText);
                string clipbrdText = Clipboard.GetText();

                string data = elem.InnerText;

                richTextBox1.Text = data;
                string temp = System.Web.HttpUtility.UrlDecode(data);

                Encoding iso = Encoding.GetEncoding("windows-1252");
                Encoding utf8 = Encoding.UTF8;
                byte[] utfBytes = utf8.GetBytes(data);
                byte[] isoBytes = Encoding.Convert(utf8, iso, utfBytes);
                string msg = iso.GetString(isoBytes);

1 个答案:

答案 0 :(得分:0)

带"%2c"的文字等已被编码。如果要获取网页的内容,则需要解码HTML,而不是URL。您可以使用HttpUtility.HtmlDecode,或者如果您使用的是.NET 4.0或更高版本,也可以使用WebUtility.HtmlDecode - 这可以在System.Net命名空间中使用。

您应该注意Word不会使用HTML进行格式化,因此您无法粘贴HTML标记并希望它能够识别它们。如果您在Word中键入,则<strong>Description</strong>将不会生成粗体文本。

编辑:

您似乎混合了两种不同的方式来复制粘贴代码中的文字 - SendKeys.SendWait("^c");elem.InvokeMember("Copy");。我认为这两种方法都有效吗?

我认为您遇到的问题在于您获取文本的方式。我看到你正在使用Clipboard.GetText()来获取文字。尝试使用Clipboard.GetText(TextDataFormat.Rtf)Clipboard.GetText(TextDataFormat.Html)指定格式化文字。这应该有希望复制保留格式的字符串。