前面写了一个博客来介绍一个插件:TextureHavenForBlender,博客可以参见这里。通过该插件,用户可以直接在Blender中查看并下载TextureHaven的所有纹理贴图,随后通过下载的纹理贴图构建材质。所有这些过程仅仅需要点击几个按钮。
该插件中,在Blender中查看TextureHaven的所有纹理贴图的步骤需要联网在TextureHaven的网站上下载图片。由于TextureHaven网站对爬虫有较高的管制,实现起来并不容易。这里采用scrapy框架先爬取TextureHaven上所有纹理的缩略图以及所有的下载链接,并为此构建一个数据库,最后使用Blender的python读取该数据库即可。
安装scrapy
安装Scrapy比较简单,直接使用pip进行安装即可。由于我们还需要使用scrapy下载图片,所以还需要安装pillow库:
pip install scrapy pillow
创建scrapy项目
使用命令创建项目TextureHavenSpider:
scrapy startproject THSpider
设置item
首先,我们需要设置item来保存需要爬取的数据(对应的数据的含义见代码),修改items.py
文件为:
import scrapy
class TexturehavenspiderItem(scrapy.Item):
main_path = scrapy.Field()
categ_url = scrapy.Field() # 纹理所属类别的网址
categ_img = scrapy.Field() # 纹理所属类别的缩略图网址
categ_tag = scrapy.Field() # 纹理所属类别的标签
categ_path = scrapy.Field() # 纹理所属列别的缩略图的本地地址
textu_url = scrapy.Field() # 纹理的网址
textu_img = scrapy.Field() # 纹理的缩略图网址
textu_tag = scrapy.Field() # 纹理标签
textu_path = scrapy.Field() # 纹理缩略图的本地地址
textu_1k_url = scrapy.Field() # 1k纹理的网址
textu_2k_url = scrapy.Field() # 2k纹理的网址
textu_4k_url = scrapy.Field() # 4k纹理的网址
textu_8k_url = scrapy.Field() # 8k为你的网址
开始爬取
首先在THSpider类中添加如下属性:
class THSpider(scrapy.spiders.Spider):
name = "TextureHaven"
allowed_domains = ["texturehaven.com"]
start_urls = [
"https://texturehaven.com/textures"
]
main_url = "https://texturehaven.com/"
main_path = "./Thumbails/"
此处main_url是在爬取过程中,网页需要跳转的基础的url,main_path是图像保存的位置。
随后修改parse函数为:
def parse(self, response):
for sel in response.xpath("//div[@class='category-list-images']/ul/a"):
img_url_text = sel.xpath("li/div/@style").extract()[0]
categ_url = self.main_url + sel.xpath("@href").extract()[0]
categ_img = self.main_url + re.search("\/files\/tex\_images\/thumbnails/([\w]*)\.jpg", img_url_text).group()
categ_tag = sel.xpath("li/p/text()").extract()[0]
yield scrapy.Request(categ_url, callback=self.categ_parse, me