tmlAgilityPack 是一个 HTML 解析库,用于 .NET 平台。它允许开发者以类似于解析 XML 的方式,轻松地解析和操作 HTML 文档。这个库特别适合处理非标准的 HTML,例如那些格式不正确或包含错误的 HTML 文档。
从原理上说,解析是一个 CPU 密集型操作。在计算资源充裕的情况下,使用多线程并行可以加快处理速度。
以下代码展示了两个场景:
使用一个线程解析 1000 个页面
使用 8 个线程解析 1000 个页面(总量 1000 个,测试机器上的 CPU 有 8 个内核)。
string html = File.ReadAllText("PATH");
//One thread
for (int i = 0; i < 1000; i++)
new HtmlDocument().LoadHtml(html);
//Several threads
Parallel.For(0, 1000, (int i) => new HtmlDocument().LoadHtml(html));
然而实际的情况是:尽管多线程版本消耗了 2 ~ 3 倍的 CPU,但所花费的时间大致相同。而且 CPU 占用率一直维持在 30% 以下。即便更换了要处理的页面,或者内核数量更多的电脑,情况都差不多。
开启更多的线程并不会提升处理的速度,这让我开始怀疑是不是存在锁的问题。遗憾的是没有在源代码中找到 lock ,但是发现了一个 Issues:
https://github.com/zzzprojects/html-agility-pack/issues/191
在使用 Profiler 工具对多线程程序进行分析之后,发现程序可能存在内存瓶颈。根据他的观察,有大约 50% 的 CPU 时间耗费在了内存分配上。
这和使用的 GC 类型有关,向 App.config 增加以下代码可以解决该问题:
<runtime>
<gcServer enabled="true"/>
<gcConcurrent enabled="false" />
</runtime>
我的程序是一个使用 .NET 8.0 框架的控制台,增加 App.config 文件之后并没有效果。于是,我找到了微软的官方文档:
https://learn.microsoft.com/zh-cn/dotnet/core/runtime-config/garbage-collector
根据文档所述,可以通过环境变量、runtimeconfig.json 文件或项目文件来指定程序使用 Server 版本。我选择修改项目文件:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<ServerGarbageCollection>true</ServerGarbageCollection>
</PropertyGroup>
</Project>
问题得以解决:处理速度快了不少,CPU 占用维持在了 70% 左右。
多人都说HTML是一门很简单的语言,看看书,看看视频就能读懂。但是,如果你完全没有接触过,就想通过看一遍教程,背背标签,想要完全了解HTML,真的有点太天真了。
HTML中文“超文本标记语言”,英文名叫HTML没有变量,没有循环,没有函数,只是单纯的一门静态语言而已。你可以用来描述静态的东西,比如标题、段落、图片。
1)HTML通常被称为静态网页。
2)HTML的一些标签代码规则将内容呈现在浏览器中所需的风格。
3)HTML可以使用记事本创建,并以.html为扩展名保存。
打开浏览器,例如打开百度的首页
这个页面非常的简洁,但是包含了很多内容,有文字、图片、动画、超链接等一系列HTML页面所能够包含的元素。什么意思,也就是说,HTML页面就是能够包含文本、图像、声音、超链接等内容的集合,然后通过浏览器对这些元素进行渲染,就呈现出多彩的页面。
打开页面的审查元素(快捷键是【F12】),就能够看到构成HTML页面的所有元素,当我们在写页面,对页面进行调试的时候,也是通过审查元素,在这个窗口里面检测问题,所以审查的方法一定要掌握。
一个HTML页面最基本框架。
优点
易于使用,松散的语法(虽然,过于灵活的将不符合标准),HTML还允许使用模板,这使设计网页变得容易、对Web设计领域的初学者来说非常有用。几乎所有浏览器都支持该功能。被广泛使用的; 建立在几乎所有网站上。与XML语法非常相似,后者已越来越多地用于数据存储。免费-无需购买任何软件,即使对于新手程序员而言,都易于学习和编码。
缺点
由于它是一种静态语言,它不能单独产生动态输出。有时,HTML文档的结构难以掌握。程序错误可能会导致高昂的代价。它只能创建静态页面和普通页面,因此如果我们需要动态页面,则HTML无效。需要编写大量代码来制作简单的网页。您必须跟上已弃用的标记,并确保不要使用它们,因为出现了另一种与HTML兼容的语言代替了标记的原始工作。因此需要学习其他语言(大多数情况下是CSS)HTML提供的安全功能受到限制。
在了解这么多之后,一定想要自己写个HTML页面试试手,那么HTML页面怎么写呢,用什么工具来写呢?在电脑上建立一个hello.txt的文件,将下面的代码粘贴复制进去保存 。
然后将后缀名修改为.html,用浏览器在页面上看到hello world字样的输出,这就是第一个HTML页面。
今天我们就先分享到这里啦,赶快去练练手吧~(私信我有免费IT课程可以领取哟)
段时间亚马逊日本站出公告称卖家不能在详情页面上使用HTML代码后,其他站点的亚马逊卖家就开始了一连串的问候:为什么美国站并没有这个news?为什么欧洲站并没有这个news?是不是新规只针对日本站?
现在亚马逊给出答案:欧洲站以及美国站卖家也即将不能使用HTML标签了。
Listing新规重要通知6月27日起,亚马逊详情页面将不再支持使用HTML标记!
Amazon HTML禁令将于2021年6月9日生效,该禁令将终止在产品详细信息页面上使用任何HTML,6月8日是允许使用HTML的最后一天。
为了确保买家的安全,并提高在非HTML设备上显示商品的通用性,于2021年6月27日之后,亚马逊将不再支持在商品详情页面的商品描述中使用HTML标记,并将停止显示其HTML格式。
公告截图如下:
请注意:各站点生效时间不一,请在卖家平台查看“新闻”板块。
建议卖家在上述日期之前更新所有商品详情页面中带有HTML标记的商品信息。您可以使用卖家平台或常规渠道进行此类更新。
举例说明:
如果商品描述的其中一行使用了HTML标记,则该行可能会被删除,也可能不显示HTML格式,具体取决于HTML标记的使用情况。
对于大多数卖家来说,您的产品详细信息页面上可能没有HTML。但是,如果您在说明中插入了HTML,则需要在截止日期之前将其删除。否则,该行将被删除或显示时不使用HTML格式,具体取决于自6月8日起使用的标签。
而Amazon仅允许将一种HTML代码用作特殊用例,就是换行符。
新规来袭,卖家们不要惊慌,小编整理了相关常见问题,帮助各位更好地理解新规,迅速找到解决方案。
1.之前使用HTML标记的Listing是否受影响?还是只对新政策生效后新建的Listing有影响?
新规生效后,所有Listing都需符合新规要求。在2021年6月27日之后,亚马逊将不支持在商品详情页面的商品描述中包含HTML标签,并将停止显示其HTML格式。
2.新规生效后,还有哪些HTML标记可以使用?
请勿在商品详情页面使用HTML、JavaScript或其他类型的代码。在特殊情况下,卖家可以在描述中使用换行符 。
3.如果不做任何改变, 在这个政策生效之后,页面呈现会发生怎样的变化?
如果商品描述的其中一行使用了HTML标记,则该行可能会被删除,也可能不显示HTML格式,具体取决于HTML标记的使用情况。
4.新规是否会对关键词抓取产生影响?
理论上不会影响,但可能会对页面格式和页面转化率带来影响。
5.应对新规,有什么解决方案建议吗?
建议卖家使用A+页面。A+页面允许您利用图片和文字的组合,通过展现场景化的商品图片,来讲述独特的品牌故事,让买家充分了解商品,增强宣传效果进而提升销售转化。
目前A+页面向日本站点卖家全面开放;北美和欧洲站点卖家必须先完成亚马逊品牌注册,才能使用A+页面的丰富产品描述模版展示商品。
商品详情页也要注意:
买家通过商品详情页面了解卖家的商品,亚马逊也对商品详情页面进行了严格规定,亚马逊要求卖家确保每个商品详情页面包含单一商品,这有助于为买家提供清晰且一致的购买体验。一般来说,卖家需要遵守以下规定:
1、遵守任何相关的风格指南,避免使用HTML、JavaScript或其他代码。
2、排除不适宜的内容,如淫秽或攻击性材料、链接或联系信息、情节剧透、评论或评论请求以及广告。
3、避免为已有详情页面的商品创建重复页面。
4、准确地分类和描述商品。
5、为新商品或新版本创建新的详情页面。
6、仅创建与主要商品相关的有效“变体”。
其中亚马逊表明在商品详情页中不允许出现:电话号码、地址、在商品图片上添加水印或者广告。而且表明商品名称不能超过200个字符(包括空格、符号)如果未能遵守这些标准,会导致负面情况出现,严重的情况会导致卖家销售权永久取消。
*请认真填写需求信息,我们会在24小时内与您取得联系。