构建了基于Jinja2的模块化爬虫模板系统。

spider-renderer的Python项目详细描述


基于 Jinja2 构建模块化爬虫模板系统

本来打算就写写题目所说的,但是后来我还是决定就全放在这个项目里了,于是这个项目就变成了我一个月实习经历的经验总结。我把我很多工作中自己写的辅助用的函数工具都放到了其中,包括网页表格解析函数、文本处理函数等,另外就是记录了遇到的比较特殊的问题的解决方法。

可实现模板外自由组合的新版本已经发布,详细说明见 v2 简明教程,这样的话基本实现了我最初的设想,然而开心不起来。。。

  • 安装方式
pip install -U spider-renderer
  • 简单模板文件示例

header.tmpl

'''Rendered on {{datetime}}'''importreimportscrapyclassNewspiderSpider(scrapy.Spider):name='{{spider}}'source='{{source}}'url='{{home_url}}'author='{{author}}'all_page={{all_page}}

requests.tmpl

defstart_requests(self):url='{{page_url}}'all_page=self.all_pageor10forpageinrange(1,all_page):yieldscrapy.Request(url%page,callback=self.parse)

parser.tmpl

{%include"header.tmpl"%}{%include"requests.tmpl"%}defparse(self,response):response.string=re.sub('[\r\n\t\v\f]','',response.text)rows=re.findall(r'''{{regex}}''',response.string)
  • 渲染生成程序示例
importosimportos.pathfromrendererimportgenspiderbasepath=os.path.abspath(os.path.dirname(__file__))dst=os.path.join(basepath,'spiders')templates_folder=os.path.join(basepath,'templates')ifnotos.path.isdir(dst):os.mkdir(dst)templatefile='parser.tmpl'spider='fonts_spider'home_url='''http://fonts.mobanwang.com/fangzheng/'''.strip()page_url='''http://fonts.mobanwang.com/fangzheng/List_%d.html'''.strip()regex=r'''href=['"](\S+?html?)['"][^<>]*?title=['"]'''.strip()kwargs={'all_page':20,'page_url':page_url,'regex':regex,'templates_folder':templates_folder,'author':'White Turing',}genspider(home_url,templatefile,dst,spider,**kwargs)

这个示例没有用到稍微复杂的 Jinja2 语法,但实际可以通过加入一些条件判断,让模板的包容性更广一点。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
将Java中的对象列表序列化为json   在同一Play Framework项目中同时使用Ebean和JPA的java   oop如何在整个Java项目中共享API密钥   java ADT Eclipse SDK故障未找到DDM   扫描程序中变量的递归Java输入值未应用于方法中的变量   java将空格转换为命令行类型的空格   JavaSpring,如何决定客户机应该使用哪个服务?   java致命异常:main(Android标准)   java编译错误是因为类型检查还是三元运算符?   java Sikuli+Webdriver:getting error x.png看起来像一个文件,但在磁盘上找不到。假设是文本   java选择位置。。。。ms sql 2005中需要电气状态   由于OSGi捆绑包依赖性问题,java无法启动RCP应用程序   json java gson fromjson返回非泛型的null   如何将google api访问令牌从java服务器传递到gapi javascript客户端?   java在已排序的LinkedList中添加元素   java ForkJoinPool为什么程序抛出OutOfMemoryError?   java SQUARE无法解析为Processing/Eclipse中的变量   java如何为Sun App Server 8.2设置JNDI