如何抓取所有可见文本但排除写在超链接上的文本?
How to scrape all visible text but exlude text written on hyperlinks?
我对网站的所有可见文本感兴趣。
唯一的问题是:我想排除超链接文本。因此我能够排除菜单栏中的文本,因为它们通常包含链接。在图像中,您可以看到菜单栏中的所有内容都可以被排除(例如“Wohnen & Bauen”)。
总而言之,我的蜘蛛看起来是这样的:
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']
我对网站的所有可见文本感兴趣。
唯一的问题是:我想排除超链接文本。因此我能够排除菜单栏中的文本,因为它们通常包含链接。在图像中,您可以看到菜单栏中的所有内容都可以被排除(例如“Wohnen & Bauen”)。
总而言之,我的蜘蛛看起来是这样的:
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']