• 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 专栏

  • 相关阅读:
    BZOJ 2400: Spoj 839 Optimal Marks (按位最小割)
    bzoj4873: [Shoi2017]寿司餐厅(最大权闭合子图)
    bzoj1497: [NOI2006]最大获利(最大权闭合子图)
    bzoj1607: [Usaco2008 Dec]Patting Heads 轻拍牛头
    bzoj1024: [SCOI2009]生日快乐
    bzoj2761: [JLOI2011]不重复数字
    bzoj1257: [CQOI2007]余数之和sum
    bzoj2456: mode
    bzoj1831: [AHOI2008]逆序对(DP+双精bzoj1786)
    bzoj2431: [HAOI2009]逆序对数列
  • 原文地址:https://www.cnblogs.com/code-charmer/p/4139599.html
Copyright © 2020-2023  润新知