首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >(Scrapy)如何获得HTML元素的CSS规则?

(Scrapy)如何获得HTML元素的CSS规则?
EN

Stack Overflow用户
提问于 2016-09-20 05:29:14
回答 1查看 2.3K关注 0票数 1

我正在用Scrapy建造一个爬虫。我需要将字体系列分配给特定的HTML元素。

假设有一个css文件styles.css,它包含以下内容:

代码语言:javascript
运行
复制
p {
    font-family: "Times New Roman", Georgia, Serif;
}

在HTML页面中有如下文本:

代码语言:javascript
运行
复制
<p>Hello how are you?</p>

使用Scrapy提取文本很容易,但是我也想知道应用到Hello的字体家族,你好吗?

我希望这只是(假想的XPATH) /p[font-family]之类的例子。

你知道我该怎么做吗?

谢谢你的想法。

EN

回答 1

Stack Overflow用户

发布于 2016-09-20 08:42:24

您需要分别下载和解析css。对于css解析,可以使用锡丝,甚至regex:

代码语言:javascript
运行
复制
import tinycss
class MySpider(Spider):
    name='myspider'
    start_urls = [
        'http://some.url.com'
    ]
    css_rules = {}

def parse(self, response):
    # find css url and parse it
    css_url = response.xpath("").extract_first()
    yield Request(css_url, self.parse_css)

def parse_css(self, response):
    parser = tinycss.make_parser()
    stylesheet = parser.parse_stylesheet(response.body)
    for rule in stylesheet.rules:
        if not getattr(rule, 'selector'):
            continue 
        path = rule.selector.as_css()
        css =  [d.value.as_css() for d in rule.declarations]
        self.css_rules[path] = css

现在,您有了一个包含css路径及其属性的字典,您可以在蜘蛛请求链中稍后使用它来分配一些值:

代码语言:javascript
运行
复制
def parse_item(self, response):
    item = {}
    item['name'] = response.css('div.name').extract_first()
    name_css = []
    for k,v in css_rules.items():
        if 'div' in k and '.name' in k:
            name_css.append(v)
    item['name_css'] = name_css
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39586331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档