我正在用Scrapy建造一个爬虫。我需要将字体系列分配给特定的HTML元素。
假设有一个css文件styles.css,它包含以下内容:
p {
font-family: "Times New Roman", Georgia, Serif;
}
在HTML页面中有如下文本:
<p>Hello how are you?</p>
使用Scrapy提取文本很容易,但是我也想知道应用到Hello的字体家族,你好吗?
我希望这只是(假想的XPATH) /p[font-family]
之类的例子。
你知道我该怎么做吗?
谢谢你的想法。
发布于 2016-09-20 08:42:24
您需要分别下载和解析css。对于css解析,可以使用锡丝,甚至regex:
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路径及其属性的字典,您可以在蜘蛛请求链中稍后使用它来分配一些值:
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
https://stackoverflow.com/questions/39586331
复制相似问题