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. error LNK1104: 无法打开文件“libboost_thread-vc140-mt-gd-1_61.lib”

    error LNK1104: 无法打开文件“libboost_thread-vc140-mt-gd-1_61.lib” 调试->你的项目属性 配置属性->VC++目录 包含目录 D:\bo ...

  2. 微信小程序 app.json 配置

    我们使用app.json文件来对微信小程序进行全局配置,决定页面文件的路径.窗口表现.设置网络超时时间.设置多 tab 等. 以下是一个包含了所有配置选项的简单配置app.json : { " ...

  3. ROS的tf_tree相关

    1.相关问答 http://answers.ros.org/question/11682/robot_pose_ekf-with-an-external-sensor/ http://ros-user ...

  4. 对于ios7扫描二维码功能的实现

    在ios7曾经,我们开发二维码扫描,或者生产都须要借助第三方的开源库进行开发. 然后升级到ios7时,在passbook中苹果自带二维码扫描功能,并且扫描速度很快,秒杀一切第三方开源库. 所以,我们做 ...

  5. poj 2516 (费用流)

    题意:有N个供应商,M个店主,K种物品.每个供应商对每种物品的的供应量已知,每个店主对每种物品的需求量的已知,从不同的供应商运送不同的货物到不同的店主手上需要不同的花费,又已知从供应商m送第k种货物的 ...

  6. Server(Iocp)的那些烦恼

    自G-Socket0.88版开源以来,得到很多朋友的支持.从1.0版本至2.0之前,内核几乎没有改变,经过多处的应用其稳定性和效率表现是相当不错的.这几年的经验总结成一句话:服务器程序不是有了一个好的 ...

  7. ZCTF-ARM64-Re300

    Re300-arm64     是一个64位的ARM程序.使用IDA加载,蹦出来这个框框,就是说IDA6.6还没有对ARM64位的程序实现relocation的分析.     就是由于这个,所以连对l ...

  8. (四)Android中Context的理解与使用

    一.Context的作用 Context可用于访问全局资源. public class MainActivity extends Activity { private TextView tv; @Ov ...

  9. 异步消息处理机制——Handler用法

    Handler 1. Message Messsge是线程之间传递的消息,它可以在内部携带少量的信息,用于在不同线程之间交换数据,Message的what字段,除此之外还可以使用arg1和arg2字段 ...

  10. 关于C语言指针几个容易混淆的概念

    前言: 大多数学习过C/C++或者正在学习的同学在对指针概念把握时,总是感觉不太明了,小弟我也不例外啊,于是翻开资料复习整理一下,并把自己的学习心得拿出来供大家分享,讨论. 基本概念掠过,主要来探讨一 ...