scrapy是一个python的爬虫框架,用于提取结构性数据。在这次宝贝计划1的项目中要用到一些数据。但四处联系后各方可能因为一些隐私问题不愿提供数据信息。这样我们只能自己爬取,存入数据库,再进行调用。

1.创建一个Scrapy项目:

scrapy startproject bback

执行命令创建项目后会自动生成一些文件如下:

  • scrapy.cfg: 项目的配置文件
  • bback/: 该项目的python模块。之后您将在此加入代码。
  • bback/items.py: 项目中的item文件.
  • bback/pipelines.py: 项目中的pipelines文件.
  • bback/settings.py: 项目的设置文件.
  • bback/spiders/: 放置spider代码的目录.

2.定义提取的Item

Item 是保存爬取到的数据的容器;其使用方法和python字典类似, 并且提供了额外保护机制来避免拼写错误导致的未定义字段错误。

Item 配置如下

from scrapy.item import Item,Field
class BbackItem(Item):
# define the fields for your item here like:
# name = scrapy.Field()
name=Field()

3.编写爬虫(Spider)

Spider是用户编写用于从网站爬取数据的类。

其包含了一个用于下载的初始URL,如何跟进网页中的链接以及如何分析页面中的内容, 提取生成 item 的方法。

为了创建一个Spider,必须继承 scrapy.Spider 类, 且定义以下三个属性:

name: 用于区别Spider。该名字必须是唯一的。

start_urls: 包含了Spider在启动时进行爬取的url列表,后续的URL是从初始的URL获取到的数据中提取。

parse() 是spider的一个方法。 被调用时,每个初始URL完成下载后生成的 Response 对象将会作为唯一的参数传递给该函数。该方法负责解析返回的数据(response data),提取数据(生成item)以及生成需要进一步处理的URL的 Request 对象。

spider **

#!/usr/bin/python
# -*- coding:utf-8 -*- from scrapy.spider import Spider
from scrapy.selector import Selector
from scrapy import log
from bback.items import BbackItem class BbackSpider(Spider):
"""爬取标签"""
#log.start("log",loglevel='INFO')
name = "bback"
allowed_domains = ["baobeihuijia.com"]
start_urls = (
'http://baobeihuijia.com/list.aspx?tid=1&sex=&photo=1&page=1/',
) def parse(self, response): sel = Selector(response)
sites=sel.xpath('//div[@class="pic_bot"]/div[@class="pic_bota"]')
items=[] for site in sites:
item = BbackItem() name=site.xpath('input/@value').extract() item['name']=[n.encode('utf-8') for n in name]
items.append(item)
#记录
log.msg("Appending item...",level='INFO') log.msg("Append done.",level='INFO')
return items

4.pipelines.py实现对item的处理

在其中主要完成数据的查重、丢弃,验证item中数据,将得到的item数据保存等工作。代码如下:

import json
import codecs class BbackPipeline(object):
def __init__(self):
self.file = codecs.open('bback_data_utf8.json', 'wb', encoding='utf-8') def process_item(self, item, spider):
line = json.dumps(dict(item)) + '\n'
# print line
self.file.write(line.decode("unicode_escape"))
return item

tips:

1宝贝计划:是我们团队参加ImageCup的一个作品,此系统是在人脸识别系统Face++云端服务平台上搭建的应用。普通用只需下载此应用,即可上传用户在(逛街时或旅途中)遇到的疑似被拐儿童的照片到失踪儿童图片库进行人脸匹配。匹配完成后,会返回一组信息,如果匹配度高达70%以上,用户即可看到该儿童的基本信息。进而可与失踪儿童父母或相关部门取得联系,拯救失踪儿童.

爬虫demo下载链接

参考链接:

scrapy文档

scrapy wiki

binux大牛写的爬虫框架pyspider

网络爬虫与数据库操作

Some Experiences Of Using

scrapy 专栏

scrapy爬虫初体验的更多相关文章

  1. Node.js 网页瘸腿爬虫初体验

    延续上一篇,想把自己博客的文档标题利用Node.js的request全提取出来,于是有了下面的初哥爬虫,水平有限,这只爬虫目前还有点瘸腿,请看官你指正了. // 内置http模块,提供了http服务器 ...

  2. Scrapy的初体验

    上一节安装了python2和python3的开发环境 首先第一步:进入开发环境,workon article_spider 进入这个环境: 安装Scrapy,在安装的过程中出现了一些错误:通常这些错误 ...

  3. 【Python3爬虫】爬取美女图新姿势--Redis分布式爬虫初体验

    一.写在前面 之前写的爬虫都是单机爬虫,还没有尝试过分布式爬虫,这次就是一个分布式爬虫的初体验.所谓分布式爬虫,就是要用多台电脑同时爬取数据,相比于单机爬虫,分布式爬虫的爬取速度更快,也能更好地应对I ...

  4. 【Python3爬虫】学习分布式爬虫第一步--Redis分布式爬虫初体验

    一.写在前面 之前写的爬虫都是单机爬虫,还没有尝试过分布式爬虫,这次就是一个分布式爬虫的初体验.所谓分布式爬虫,就是要用多台电脑同时爬取数据,相比于单机爬虫,分布式爬虫的爬取速度更快,也能更好地应对I ...

  5. 【Go 入门学习】第一篇关于 Go 的博客--Go 爬虫初体验

    一.写在前面 其实早就该写这一篇博客了,为什么一直没有写呢?还不是因为忙不过来(实际上只是因为太懒了).不过好了,现在终于要开始写这一篇博客了.在看这篇博客之前,可能需要你对 Go 这门语言有些基本的 ...

  6. python2.7 爬虫初体验爬取新浪国内新闻_20161130

    python2.7 爬虫初学习 模块:BeautifulSoup requests 1.获取新浪国内新闻标题 2.获取新闻url 3.还没想好,想法是把第2步的url 获取到下载网页源代码 再去分析源 ...

  7. python学习之爬虫初体验

    作业来源: "https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2851" ** 1.简述爬虫原理 通用爬虫 即(搜索 ...

  8. Java爬虫初体验

    年关将近,工作上该完成的都差不多了,上午闲着就接触学习了一下爬虫,抽空还把正则表达式复习了,Java的Regex和JS上还是有区别的,JS上的"\w"Java得写成"\\ ...

  9. appium+夜神模拟器+python安卓app爬虫初体验

    环境搭建:Windows 7 64bit jdk包:jdk-8u171-windows-x64.exe(http://www.oracle.com/technetwork/java/javase/do ...

随机推荐

  1. iOS断言

    来自:http://my.oschina.net/panyong/blog/205573 在看到xmpp项目中的一些代码时,看到如下,不懂该代码是啥意思, 如下: NSAssert(_xmppStre ...

  2. 创建渐进式jpeg图片

    <?php // Create an image instance $im = imagecreatefromjpeg('test.jpg');   // Enable interlancing ...

  3. QImage 与 cv::Mat 之间的相互转换

    近期做图像处理方面的项目比較多,非常多算法自己从头写的话太浪费时间,并且自己写的也不一定完好,早就听说OpenCV在图像处理算法方面功能非常强大,一直没时间学习,这次正好项目用到了.暂时抱佛脚学习些O ...

  4. Hadoop书籍下载链接

    Hadoop书籍推荐1:Hadoop实战(结合经典案例全面讲解hadoop整个技术体系)http://www.db2china.net/club/thread-25148-1-1.html2:Hado ...

  5. pixel像素与物理像素

  6. dom操作例子

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  7. Oracle利用过程procedure块实现银行转账

    -- create table account( id ) not null, name ), ,2), constraint a_pk primary key(id) ); --历史表 select ...

  8. Database name和SID

    http://docs.oracle.com/cd/B19306_01/install.102/b15667/rev_precon_db.htm#i1027493 The Oracle Databas ...

  9. Hadoop学习笔记——入门指令操作

    假设Hadoop的安装目录HADOOP_HOME为/home/admin/hadoop. 启动与关闭启动HADOOP1. 进入HADOOP_HOME目录. 2. 执行sh bin/start-all. ...

  10. 使用CRT定位内存泄漏

    1. 使能内存泄漏检测#define _CRTDBG_MAP_ALLOC#include <stdlib.h>#include <crtdbg.h>注1:语句顺序不能修改:注2 ...