如何抓取所有可见文本但排除写在超链接上的文本?

How to scrape all visible text but exlude text written on hyperlinks?

我对网站的所有可见文本感兴趣。

唯一的问题是:我想排除超链接文本。因此我能够排除菜单栏中的文本,因为它们通常包含链接。在图像中,您可以看到菜单栏中的所有内容都可以被排除(例如“Wohnen & Bauen”)。

https://www.gross-gerau.de/B%C3%BCrger-Service/Ver-und-Entsorgung/Abfallinformationen/index.php?object=tx,2289.12976.1&NavID=3411.60&La=1

总而言之,我的蜘蛛看起来是这样的:

class MySpider(CrawlSpider):
    name = 'my_spider'

    start_urls = ['https://www.gross-gerau.de/B%C3%BCrger-Service/Wohnen-Bauen/']

    rules = (
            Rule(LinkExtractor(allow="B%C3%BCrger-Service", deny=deny_list_sm),
                 callback='parse', follow=True),
        )


    def parse(self, response):

        item = {}
        item['scrape_date'] = int(time.time())
        item['response_url'] = response.url

        # old approach 
        # item["text"] = " ".join([x.strip() for x in response.xpath("//text()").getall()]).strip()
        # exclude at least javascript code snippets and stuff 
        item["text"] = " ".join([x.strip() for x in response.xpath("//*[name(.)!='head' and name(.)!='script']/text()").getall()]).strip()

        yield item

该解决方案应该适用于其他网站,too.Does 任何人都知道如何解决这个挑战?欢迎任何想法!

您可以将谓词扩展为

[name()!='head' and name()!='script' and name()!='a']