首页 > 解决方案 > 如何删除 requests_html 中的 adsense 代码?

问题描述

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

一些文本一些文本一些文本一些文本然后这个: (adsbygoogle = window.adsbygoogle || []).push({});

一些文本 一些文本 一些文本 换行后的一些文本 然后是: sas.cmd.push(function() { sas.call("std", { siteId: 301357, // pageId: 1101926, // Page : Seneweb_AF/rg formatId: 49048, // 格式 : Pave 2 300x250 target: '' // Ciblage }); });

现在我怎样才能摆脱上面的斜体粗体文字?

标签: pythonweb-scrapingadsensepython-requests-html

解决方案


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

如果(adsbygoogle = window.adsbygoogle || []).push({});始终是完全相同的字符串(每次都包括相同的空格),那么您可以使用str.replace(). 请参阅如何在 python 3.x 中使用 string.replace()

如果文本每次都不完全相同——我猜至少你展示的第二个例子每次都不一样——那么你可以使用正则表达式。请参阅模块的 python 文档re。如果您只在程序中使用几个正则表达式,您可以调用re.sub,如下所示:

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

可能需要一些试验和错误才能pattern匹配每个案例,就像第二个例子一样。

如果检索到的文章中有换行符,您将需要re.MULTILINE,因为几乎肯定会有,并且re.DOTALL为了使某些正则表达式模式跨行边界工作,这似乎是第二个示例所需要的。

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

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

稍后,当您有要从中删除部分的文本时,您可以像这样进行搜索和替换:

sanitized_text = pattern.sub('', original_text)

推荐阅读