【问题标题】:C# Web scraper copying textC# Web scraper 复制文本
【发布时间】:2015-05-12 06:37:17
【问题描述】:

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

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

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

这是要提取的示例数据:

说明

Advance Concepts 工程团队设计和开发满足未来监管要求和客户竞争要求的新车。合格的候选人将负责整车包装。随着车辆走向生产,候选人将识别并解决适应和包装问题。他们将主持跨职能团队会议,与系统和组件、先进制造、服务等部门合作,确保针对车辆生命周期的所有阶段优化解决方案。

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);

【问题讨论】:

  • 您的问题解决了吗?
  • 不,伊万,我不能。我本来想复制文本并将其粘贴到任何 Word 文档或任何地方以保存它。但我无法复制文本。手动我可以复制,但它没有用。你有办法吗?

标签: c# web-scraping webbrowser-control


【解决方案1】:

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

您应该注意,Word 不使用 HTML 进行格式化,因此您无法粘贴 HTML 标记并期望它能够识别它们。即 <strong>Description</strong> 在 Word 中输入时不会产生粗体文本。

编辑:

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

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

【讨论】:

  • 感谢伊万的回复。我搜索了格式问题。因此,我正在尝试复制和粘贴文本。当我从我的网络浏览器(如 chrome)或什至从网络浏览器控件复制和粘贴并将其粘贴到 word 时,格式保持不变。所以我试图找到一种以编程方式复制和粘贴文本的方法。有关该功能的任何帮助也将非常有帮助。
  • 如果我理解正确,您的程序会将 HTML 插入 Windows 剪贴板(程序化副本),然后您按 Ctrl-V 并将文本粘贴到文档中,但它缺少格式并且有 HTML代替标签?
  • 没有。我在元素上使用了 SendKeys("^C") 之类的代码,但它没有复制任何内容。我无法获得任何方法来复制文本然后粘贴它。目前我只使用 element.innertext 并且还尝试了 HTTPUtility.HtmlDecode 但无济于事
  • 您能编辑您的问题并发布您的代码吗?这样可以更轻松地查看正在发生的事情。
猜你喜欢
  • 1970-01-01
  • 2013-01-16
  • 1970-01-01
  • 2021-10-19
  • 1970-01-01
  • 2018-06-23
  • 2019-04-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多