基于 flask 框架的模拟instagram 图片分享网站的开发 7 (爬虫机器人)
2016-07-24 23:20
573 查看
1. 前言
我们之前使用flask实现了一个模拟instagram的图片分享网站的开发, 但是图片的更新需要用户上传, 但是由于用户比较少, 鉴于这个问题, 我们就考虑引入一个爬虫机器人, 自动的向web程序相关的数据库表项中写入数据。2. scrapy框架
这里选用的是scrapy框架:参考资料:
1.官方文档: http://doc.scrapy.org/en/latest/intro/tutorial.html
2. http://blog.csdn.net/zhyh1435589631/article/details/51516241
借助这个框架, 我们可以借助非常精简的代码, 实现复杂的抓取工作。
3. 思路分析
我们这里需要抓取的页面为 poco.cn 的风景图:http://photo.poco.cn/like/index-upi-p-1-tpl_type-hot-channel_id-4.html#list
通过分析, 发现这里 p-1 标识第一页, 相应的第n页, 即为 p-n
提取相应图片的url
经过测试, 发现onerror后面紧接着的连接即为我们需要的图片的url地址了, 通过简单的xpath, 和 re 方法组合, 我们可以方便的提取相应的元素
将爬取下来的图片的url存入数据库
这里主要使用之前instagram项目中的数据库中的表项 image, 利用mysqldb 方法进行连接。
参考资料: http://blog.csdn.net/zhyh1435589631/article/details/51544903
4. 实现代码
主要实现功能, 抓取poco风景类前100页对应的图片的url, 并存到相应的image 表中。import scrapy from model import db1 from datetime import datetime from tutorial.items import TutorialItem INSERT_SQL = "insert into image (url, user_id, create_date) values ('%s', %d, '%s')" class DmozSpider(scrapy.Spider): name = "poco" allowed_domains = ["poco.cn"] page_id = 1 url_prefix = "http://photo.poco.cn/like/index-upi-p-" url_suffix = "-tpl_type-hot-channel_id-1.html#list" start_urls = [ url_prefix + str(page_id) + url_suffix, ] def parse(self, response): total_page = response.xpath('//*[@id="list"]/div/a/text()').extract()[-2] # for i in range(1, int(total_page) + 1, 1): for i in range(1, 2, 1): url = self.url_prefix + str(i) + self.url_suffix print url yield scrapy.Request(url, callback=self.parse_url) def parse_url(self, response): for item in response.xpath('//*[@id="list"]/div/ul/li/div/a/img/@onerror'): item1 = TutorialItem() item1['url'] = item.re("onerror_for.*'(.*)'.*'http:.*'"); sql = INSERT_SQL % (item1['url'][0], 32, datetime.now().strftime("%Y-%m-%d %H:%M:%S")) print sql db1.execute(sql) yield item1
5. 抓取效果
为了简单起见, 我们这里只抓取了前2页的图片url信息, 存入数据库。
6. 说明
本来想将这个程序放到服务器上的, 不过可惜配置lxml的时候出现了问题。command ‘gcc’ failed with exit status 4
找了好久终于发现, 原来是我们的服务器的内存太小导致的。。。那就没办法了。。。
相关文章推荐
- Android之获取手机上的图片和视频缩略图thumbnails
- install and upgrade scrapy
- install scrapy with pip and easy_install
- Scrapy的架构介绍
- 数据库链接字符串查询网站
- DB2实例管理
- DB2实例管理
- 保障MySQL数据安全的14个最佳方法
- mysql问答汇集
- 第三章 数据库备份和还原
- 创建一个空的IBM DB2 ECO数据库的方法
- Access 2000 数据库 80 万记录通用快速分页类
- 开通一个数据库失败的原因的和解决办法
- 一个简单的asp数据库操作类
- CentOS下DB2数据库安装过程详解
- EasyASP v1.5发布(包含数据库操作类,原clsDbCtrl.asp)第1/2页
- sql2008 还原数据库解决方案
- Oracle 数据库自动存储管理-安装配置
- Oracle数据库执行脚本常用命令小结