scrapy爬虫初体验

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)) + '
'
        # 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 专栏

原文地址:https://www.cnblogs.com/code-charmer/p/4139599.html