如何删除html中的adsense代码?

2024-05-14 08:39:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用requests_html库来抓取一个网站,但我同时从该网站抓取的文本中获取adsense。该示例如下所示:

some text some text some text some text and then this: (adsbygoogle = window.adsbygoogle || []).push({});

some text some text some text after a line break and then this: sas.cmd.push(function() { sas.call("std", { siteId: 301357, // pageId: 1101926, // Page : Seneweb_AF/rg formatId: 49048, // Format : Pave 2 300x250 target: '' // Ciblage }); });

现在我怎样才能去掉上面的斜体粗体文本呢


Tags: andtext文本示例网站htmlsomewindow
2条回答

假设您能够在需要删除不需要的部分之前将文本作为字符串保存,则可以搜索并替换

如果(adsbygoogle = window.adsbygoogle || []).push({});始终是完全相同的字符串(每次都包含相同的空格),则可以使用str.replace()。 见How to use string.replace() in python 3.x

如果文本每次都不完全相同,并且我猜至少您展示的第二个示例每次都不相同,那么您可以使用正则表达式。见the python documentation of the ^{} module。 如果在程序中只使用少数正则表达式,则可以调用re.sub, 大概是这样的:

sanitized_text = re.sub(regularexpression, '', original_text, flags=re.MULTILINE|re.DOTALL)

可能需要一些尝试和错误getpattern来匹配与第二个示例类似的每个案例

如果检索到的文章中有新行(几乎肯定会有),则需要re.MULTILINEre.DOTALL以使某些正则表达式模式跨行边界工作,这似乎是第二个示例所需要的

如果最终不得不使用多个正则表达式,则可以在开始刮取之前使用re.compile编译它们:

pattern = re.compile(regularexpression, flags=re.MULTILINE|re.DOTALL)

稍后,当您有要从中删除片段的文本时,可以按如下方式进行搜索和替换:

sanitized_text = pattern.sub('', original_text)

如果requests_html没有处理这个问题的内置机制,那么解决方案就是使用纯python;这是我到目前为止发现的:

curated_article = article.text.split('\n')
curated_article = "\n".join(list(filter(lambda a: not a.startswith("&#"), curated_article)))
print(curated_article)

其中article是被刮伤物品的html

相关问题 更多 >

    热门问题