scrapy 2.3 嵌套装载机
2021-06-07 15:58 更新
从文档的子部分分析相关值时,创建嵌套加载器可能很有用。假设您正在从一个页面的页脚提取细节,该页面的外观如下:
例子::
<footer>
<a class="social" href="https://facebook.com/whatever" rel="external nofollow" target="_blank" >Like Us</a>
<a class="social" href="https://twitter.com/whatever" rel="external nofollow" target="_blank" >Follow Us</a>
<a class="email" href="mailto:whatever@example.com">Email Us</a>
</footer>
如果没有嵌套加载程序,则需要为要提取的每个值指定完整的xpath(或css)。
例子::
loader = ItemLoader(item=Item())
# load stuff not in the footer
loader.add_xpath('social', '//footer/a[@class = "social"]/@href')
loader.add_xpath('email', '//footer/a[@class = "email"]/@href')
loader.load_item()
相反,您可以使用页脚选择器创建嵌套加载程序,并添加相对于页脚的值。功能相同,但避免重复页脚选择器。
例子::
loader = ItemLoader(item=Item())
# load stuff not in the footer
footer_loader = loader.nested_xpath('//footer')
footer_loader.add_xpath('social', 'a[@class = "social"]/@href')
footer_loader.add_xpath('email', 'a[@class = "email"]/@href')
# no need to call footer_loader.load_item()
loader.load_item()
您可以任意嵌套加载程序,它们可以使用xpath或css选择器。作为一般准则,当嵌套加载器使您的代码更简单,但不要过度嵌套,否则您的解析器可能会变得难以读取。
以上内容是否对您有帮助:
更多建议: