使用CSS和Scrapy提取所有没有标记的文本-失败

使用CSS和Scrapy提取所有没有标记的文本-失败,css,text,web-scraping,tags,scrapy,Css,Text,Web Scraping,Tags,Scrapy,我看到很多Xpath答案,但没有CSS答案。我已经成功地提取了我需要的所有文本-但它完全“包装”了吗?在标签、字体细节等方面,我从网站上删除了一些角色描述 我使用的代码改编自Scrapy教程-我想从网站上为每个角色提取所有与工作相关的文本: def parse(self, response): for href in response.css('.mask-on-hover + a::attr(href)'): yield response.follow(href, se

我看到很多Xpath答案,但没有CSS答案。我已经成功地提取了我需要的所有文本-但它完全“包装”了吗?在标签、字体细节等方面,我从网站上删除了一些角色描述

我使用的代码改编自Scrapy教程-我想从网站上为每个角色提取所有与工作相关的文本:

def parse(self, response):
    for href in response.css('.mask-on-hover + a::attr(href)'):
        yield response.follow(href, self.parse_author)

def parse_author(self, response):
    def extract_with_css(query):

        return response.css(query).extract()

    yield {
        'role': extract_with_css('h1::text'),
        'literature': extract_with_css('h3 span.info::text'),
        'date-posted': extract_with_css('h3 span#ctl00_spListed.info.listed::text'),
        'role-description': extract_with_css('#ctl00_regionContent_lblJobDescription span , strong::text'),}
我对特定页面的结果包括所有文本,但也包括html标记和元素,包括跨度、样式、字体大小

如何使用CSS按照网站外观的顺序获得干净的文本?理想情况下,我希望保留段落样式,并最终将其发送到Excel/CSV中的一个单元格


谢谢大家!

如果css选择器正是您想要的,您可以使用w3lib中的方法,但我认为在您的情况下没有必要,请尝试以下方法:

'role-description': extract_with_css('#ctl00_regionContent_lblJobDescription span *::text')

工作成功了!你能解释一下原因吗?唯一的问题是标题和段落之间没有间隔。是的,这就像在xpath中询问//文本,这意味着span内部的任何节点都会被询问其文本谢谢-我尝试将此应用于不同的网站,但相同的编码结构,它不起作用。。使用角色描述代码:角色描述:使用css'p span,com\.peopleclick\.cp\.formdata\.JPM\u基本功能标签,com\.peopleclick\.cp\.formdata\.JPM\u描述标签*::text','这是有效的css选择器吗?顺便说一句,*::文本应该在每个表达式的末尾,逗号可以理解为或选择器,例如,如果您希望所有文本都位于p span选择器中,那么它应该是p span*::text如果您想要更多选择器,那么应该使用类似于p span*::text,id.class*::text。。。