我如何使用HTML Agility Pack?
我的XHTML文档并不完全有效.这就是我想要使用它的原因.我如何在我的项目中使用它?我的项目是在C#中.
我正在寻找C#代码将HTML文档转换为纯文本.
我不是在寻找简单的标签剥离,而是要输出纯文本,并合理保留原始布局.
输出应如下所示:
我看过HTML Agility Pack,但我认为这不是我需要的.有没有人有任何其他建议?
编辑:我只是从CodePlex下载HTML Agility Pack ,并运行Html2Txt项目.多么令人失望(至少是html到文本转换的模块)!所有这一切都是剥离标签,压平表等.输出看起来不像Html2Txt @ W3C产生的.太糟糕了,这个来源似乎不可用.我当时想看看是否有更多的"罐装"解决方案.
编辑2:谢谢大家的建议. FlySwat向我倾斜了我想去的方向.我可以使用System.Diagnostics.Process
类的"突降"开关运行lynx.exe将文本发送到标准输出,并与捕获标准输出ProcessStartInfo.UseShellExecute = false
和ProcessStartInfo.RedirectStandardOutput = true
.我将把所有这些包装在一个C#类中.这个代码只会偶尔被调用,所以我不太关心产生一个新进程而不是代码执行它.另外,Lynx很快!
我在这里看到了一些相关的问题,但他们并没有完全谈论我面临的同样问题.
我想使用HTML Agility Pack从HTML中删除不需要的标记,而不会丢失标记中的内容.
例如,在我的场景中,我想保留标签" b
"," i
"和" u
".
并输入如下:
<p>my paragraph <div>and my <b>div</b></div> are <i>italic</i> and <b>bold</b></p>
生成的HTML应为:
my paragraph and my <b>div</b> are <i>italic</i> and <b>bold</b>
我尝试使用HtmlNode
的Remove
方法,但它也删除了我的内容.有什么建议?
我正在尝试在Linux ubuntu,python 3.5.2上安装uswgi
pip install uwsgi
Run Code Online (Sandbox Code Playgroud)
我收到了这个错误
Failed building wheel for uwsgi
Run Code Online (Sandbox Code Playgroud)
并在安装日志的末尾
*** uWSGI compiling embedded plugins ***
[thread 0][x86_64-linux-gnu-gcc -pthread] plugins/python/python_plugin.o
[thread 1][x86_64-linux-gnu-gcc -pthread] plugins/python/pyutils.o
In file included from plugins/python/python_plugin.c:1:0:
plugins/python/uwsgi_python.h:2:20: fatal error: Python.h: No such file or directory
compilation terminated.
In file included from plugins/python/pyutils.c:1:0:
plugins/python/uwsgi_python.h:2:20: fatal error: Python.h: No such file or directory
compilation terminated.
----------------------------------------
Command "/home/ubuntu/envflask/env/bin/python3 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-wthov1ur/uwsgi/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-quiupta5-record/install-record.txt --single-version-externally-managed --compile --install-headers /home/ubuntu/envflask/env/include/site/python3.5/uwsgi" failed …
Run Code Online (Sandbox Code Playgroud) 我认为这是一个相当有趣的算法挑战.好奇,如果有人有任何好的解决方案的建议,或者它已经以已知的方式解决.
TCGPlayer.com为各种游戏销售收藏卡,包括Magic the Gathering.它们实际上是来自多个供应商(50+)的转售商,而不仅仅是从他们的库存中销售卡片.每个供应商都有不同的卡片库存和每张卡的不同价格.每个供应商也收取统一运费(通常).鉴于所有这些,如何找到一副牌的最佳价格(比如说40到100张牌)?
只是找到每张卡的最优价格是行不通的,因为如果您从10个不同的供应商订购10张卡,那么您支付10次运费,但如果您从一个供应商订购所有10个卡,则只支付一次运费.
另一天晚上,我写了一个简单的HTML Scraper(使用HTML Agility Pack),它可以获取每张卡的所有不同价格,然后找到所有带有卡中所有卡的供应商,总计来自每个供应商的卡的价格和按价格排序.这真的很容易.总价格最终接近所有卡的总中位数价格.
我注意到一些个人卡最终远高于中位数价格.这引发了在多个供应商之间拆分订单的问题,但只有通过将订单拆分以支付额外运费(每个添加的供应商增加另一个运费)才能节省足够的成本.
从逻辑上看,似乎最好的价格可能只涉及一些不同的供应商,但如果这些卡足够昂贵(有些是),那么理论上从不同的供应商订购每张卡仍然可以节省足够的成本以证明所有额外的运费.
如果你打算解决这个问题,你会怎么做?纯粹的蛮力计算卡/供应商组合的每种可能组合?在我的生命中更有可能完成的过程似乎涉及在固定次数的迭代中的一系列有条理的估计.我有几个想法,但我很好奇其他人的建议.
我正在寻找比实际代码更多的算法.我目前正在使用.NET,如果这有任何区别.
我有一个有很多输出的程序.一旦完成,我经常想回滚到运行的开始,以便我可以看到那里的一些东西.由于输出很长,我看到自己无休止地使用PageUp滚动并尝试将右侧的滚动条拖动到可能已经开始的位置.过了一段时间,这开始变得非常无聊,所以我想知道:
有没有办法让终端滚动回到最后一个命令的部分?
我正在为.NET多线程应用程序寻找无头浏览器.它必须具有下一个功能:
我找到了这个解决方案
但不知道什么是最好的.如果您建议我最好的解决方案并给出一些使用它的.NET示例,将会很高兴.
我需要LINK
和META
从ASP.NET页面,用户控件和母版页元素,抓住他们的内容,然后写回更新的值在公用事业我工作的这些文件.
我可以尝试使用正则表达式来获取这些元素,但这种方法存在一些问题:
SCRIPT
包含看起来像有效元素的注释和/或VBScript/JavaScript的元素等.META
和LINK
元素中的IE条件注释我在.NET中对HTML解析器进行了一些研究,许多SO帖子和博客都推荐了HTML Agility Pack.我以前从未使用它,我不知道它是否可以解析破碎的HTML和HTML片段.(例如,假设一个用户控件只包含一个包含HEAD
一些内容的元素 - 没有HTML
或BODY
.)我知道我可以阅读文档,但如果有人可以提供建议,它会节省很多时间.(大多数SO帖子都涉及解析完整的HTML页面.)
我仍然在Amazons SES的沙箱中尝试设置一个反弹电子邮件处理程序.
我正在使用邮箱模拟器来测试退回/投诉电子邮件.
我已选择此主题接收退回电子邮件通知,然后我已禁用电子邮件通知:
但是,当我从SES发送电子邮件到bounce@simulator.amazonses.com时,我仍然收到一封退回电子邮件,并且SNS主题中没有更新.
我正在寻找一些关于如何使用不同的键过滤并同时从 IndexedDB 中获取排序结果的建议。
条件是:
我的解决方案包括两件事:
具有两个键的复合索引:过滤键和排序键。在我的示例中,我按名称过滤并按id排序:
objectStore.createIndex('nameId', ['name','id'], { unique: true });
在查询中,我使用带有下限和上限的索引。由于附加了“0”,这不是一个优雅的解决方案:
objectStore.index('nameId').openCursor(window.IDBKeyRange.bound(['John'], ['John' + '0'], true, false));
这按预期工作,在我的示例中返回:
1. {"name":"John","id":13}
2. {"name":"John","id":75}
3. {"name":"John","id":77}
4. {"name":"John","id":78}
5. {"name":"John","id":88}
6. {"name":"John","id":98}
7. {"name":"John","id":99}
Run Code Online (Sandbox Code Playgroud)
是否有更优雅的解决方案来实现相同的结果?
完整示例:
http://codepen.io/ncortines/pen/pjvgJB?editors=001
1. {"name":"John","id":13}
2. {"name":"John","id":75}
3. {"name":"John","id":77}
4. {"name":"John","id":78}
5. {"name":"John","id":88}
6. {"name":"John","id":98}
7. {"name":"John","id":99}
Run Code Online (Sandbox Code Playgroud)
c# ×4
html ×3
.net ×2
algorithm ×1
amazon-ses ×1
amazon-sns ×1
automation ×1
bash ×1
browser ×1
command-line ×1
flask ×1
headless ×1
indexeddb ×1
javascript ×1
linux ×1
parsing ×1
python ×1
scroll ×1
terminal ×1
uwsgi ×1
web-scraping ×1