无论使用scrapy包含哪些标签,如何刮取特定文本

时间:2019-03-18 12:39:08

标签: javascript python html scrapy

我正在尝试抓取许多站点,以查找是否存在某些代码段。在大多数情况下,刮板都能按预期工作。

我正在使用以下方法找到要查找的代码:

...
item["foo"] = response.xpath("//script[contains(text(), 'fooscript')]")

...
if len(item["foo"]) != 0:
    doStuff()

但是,我的问题如下:有时我想找到的东西不在脚本本身中,而是作为脚本的源(我也知道如何抓取),有时当我使用JQuery时,无法获得正确的刮擦结果。

所以我的问题是,有没有一种更简单的方法可以浏览原始HTML / JS文本以找到与我要查找的内容匹配的内容?尝试查看所有适用于刮擦的替代方法将很快使代码膨胀,而我只需要查看是否存在此特定文本即可。在官方的scrapy文档中,我还没有找到合适的方法(尽管我对该工具还不甚了解,所以我可能会错过它),因此,如果有人对此有解决方案,将不胜感激。

1 个答案:

答案 0 :(得分:0)

也许您正在寻找通过HTML源代码进行的简单正则表达式搜索?像

if re.search(r'fooscript', response.text):
    doStuff()

或者,如果您只知道它包裹在某个元素中,而又不知道是哪个,则可以这样做

item["foo"] = response.xpath("//*[contains(text(), 'fooscript')]")

此外,您无需使用len来简单地检查结果

if item["foo"]:
    doStuff()

足够了。