基于 flask 框架的模拟instagram 图片分享网站的开发 7 (爬虫机器人)

1. 前言

我们之前使用flask实现了一个模拟instagram的图片分享网站的开发, 但是图片的更新需要用户上传, 但是由于用户比较少, 鉴于这个问题, 我们就考虑引入一个爬虫机器人, 自动的向web程序相关的数据库表项中写入数据。

2. scrapy框架

这里选用的是scrapy框架:
参考资料:
1.官方文档: http://doc.scrapy.org/en/latest/intro/tutorial.html
2. http://blog.youkuaiyun.com/zhyh1435589631/article/details/51516241

借助这个框架, 我们可以借助非常精简的代码, 实现复杂的抓取工作。

3. 思路分析

  1. 我们这里需要抓取的页面为 poco.cn 的风景图:
    http://photo.poco.cn/like/index-upi-p-1-tpl_type-hot-channel_id-4.html#list
    通过分析, 发现这里 p-1 标识第一页, 相应的第n页, 即为 p-n

  2. 提取相应图片的url
    这里写图片描述
    经过测试, 发现onerror后面紧接着的连接即为我们需要的图片的url地址了, 通过简单的xpath, 和 re 方法组合, 我们可以方便的提取相应的元素

  3. 将爬取下来的图片的url存入数据库
    这里主要使用之前instagram项目中的数据库中的表项 image, 利用mysqldb 方法进行连接。
    参考资料: http://blog.youkuaiyun.com/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
找了好久终于发现, 原来是我们的服务器的内存太小导致的。。。那就没办法了。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值