{"repo":"lifefloating/scrapy_django_tianya","free":true,"listed":false,"github":"https://github.com/lifefloating/scrapy_django_tianya","clone":"git clone https://github.com/lifefloating/scrapy_django_tianya.git","description":"Scrapy, tianya, 天涯; scrapy django增量抓取天涯莲蓬鬼话全部帖子","language":"Python","stars":26,"topics":["crawler","django","python","scrapy","spider","oscs"],"license":null,"category":"scrapers-browser-automation","readme_excerpt":"scrapy django tianya 天涯 tianya - Scrapy+Django 增量抓取天涯莲蓬鬼话 目标网址莲蓬鬼话 Scrapy文档 bi 传送门scrapy官方文档1.4.0 Django文档 bi 传送门django文档 主要过程 scrapy+django环境搭建 数据库结构设计 scrapy代码实现 去重与增量 反爬策略 数据用于django页面的展示 部署至centos 周期性抓取 (虚拟机暂时熟悉下部署流程) Scrapy+Django环境搭建 这里用Django的modes层来作为scrapy的item定义 网上有很多关于这种教程推荐看下：http://blog.csdn.net/clayanddev/article/details/53768975 环境配置 google! django和scrapy改怎么搞怎么搞不介绍过多，重点是下面的一段，不然很可能按照上面教程走下来无法完成环境搭建 在spider文件夹同级目录下的 init .py文件里加上下面代码： import os, sys, django sys.path.append(r'E:\\PythonProject\\scrapy django tianya2\\tianya') # 填你的django项目路径 os.environ.setdefault(\"DJANGO SETTINGS MODULE\", \"tianya.settings\") # django项目.settings django.setup() 这样大体环境搭建完成! 数据库设计 代码在Django的Models.py那里 需要注意的是story表的话story link 唯一索引 story mark,story order联合索引 这里的联合索引是后面数据查询的必要条件，因为数据量略大story表100多w数据，查询条件还是加个索引 #### 数据库表数据概略 tianya index表 tianya story表 目前103w的帖子 tianya story表 目前103w的帖子 scrapy代码实现 去重与增量 我讲下思路和流程吧，因为代码注释很全了已经。 全量以及去重 目标网址是天涯的莲蓬鬼话全部帖子的章节，首先可以先做一次全量，虽然可能不全，但是无妨 先把全部帖子的全部url抓下来，xpath找到首页全部url，找到下一页，如此直到没有下一页为止，url的入口链接已经基本拿到 每个url一个主题帖，里面有很多个页，每一页有多个章节，多页的url可以通过抓取最后一页的url再去拼接出全部url 拿到全部url之后，再写个spider去处理这些url的帖子item，这个时候可以考虑多进程，所以这里需要去重，多个进程去取url跑 难免会有重复的，跑之前取到的url先random.shuffle一下，这里去重方案我是将全部url取出放置Redis， 每当爬取或者因为需要丢弃这个url，这个url再Redis中对于的value改为1，没有爬取的value为0，每次只从value为0的中取key作为url 其实这里有缺陷，就是效率问题，如果有更好方案希望私我，scrapy-redis暂时不考虑 增量与去重 增量 对比回复时间与上次的回复时间，判断是否更新 首页的url和story index表中story link main 比较 如果他存在与说明不是全新的帖子 这里与数据库交互一次，顺带说下django自带的数据库驱动是MySQLdb暂时不支持python3.6的，我使用的pymysql 在","default_branch":null,"files":null,"tree":[],"storefront":"/r/lifefloating","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/lifefloating/scrapy_django_tianya/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}