• 使用scrapy框架做赶集网爬虫


    使用scrapy框架做赶集网爬虫

    一、安装
    首先scrapy的安装之前需要安装这个模块:wheel、lxml、Twisted、pywin32,最后在安装scrapy

    pip install wheel
    pip install lxml
    这个地址是一个下载python包的好地方
    https://www.lfd.uci.edu/~gohlke/pythonlibs/下载twisted
    pip install Twisted
    pip install pywin32
    pip install scrapy
    
    安装完成后
    输入scrapy 能够执行,并能提示版本,说明安装没问题
    

    二、Scrapy项目的创建

    1、在前面输入 scrapy 的时候有个选项是 startproject,这个选项是创建scrapy项目,我们在命令提示符中输入:
    scrapy startproject zufang (zufang是项目名称)

    2、打开pycharm-->file-->open 找到建好的项目,显示项目结构

    init.py 保持默认,不修改

    items.py 保存爬取到的数据的容器

    middlewares.py 中间件配置文件

    settings.py 项目的设置文件,延迟等。

    pipelines.py 项目管道文件,对传入的项目类中的数据进行一个清理和入库

    spiders目录 该目录下只有一个init.py 文件,在该目录下定义爬虫类并集成scrapy.Spider

    scrapy genspider ganji tj.ganji.com 前一个是py文件名名后一个是要爬取的url
    生成一个ganji.py文件

    三、创建数据库
    1、pycharm下方的Terminal输入
    python

        import sqlite3
        zufang=sqlite3.connect("zufang.sqlite")
        createtable="create table zufang(title varchar(512),money varchar(128))"
        zufang.execute(createtable);
    2、完成创建数据库和表
    3、按住这个文件拖动到右侧的Database中
    

    四、修改代码
    1、在ganji.py中配置需要访问的域名和要爬取的url

            # -*- coding: utf-8 -*-
            from zufang.items import *
            import scrapy
    
    
            class GanjiSpider(scrapy.Spider):
                name = 'zufang'
                allowed_domains = ['tj.ganji.com']
                start_urls = ['http://tj.ganji.com/fang1/chaoyang/']
    
                def parse(self, response):
                    print(response)
                    zf = ZufangItem()
                    allrawpriceList=response.xpath('//div/dl/dd[5]//div/span[1]/text()').extract()
                    allrawtitleList = response.xpath('//*[@class ="f-list-item ershoufang-list"]/dl/dd[1]/a/text()').extract()
                    for title, price in zip(allrawtitleList, allrawpriceList):
                        zf["title"] = title;
                        zf["money"] = price
                        yield zf
    
    2、item.py修改代码
        import scrapy
    
    
        class ZufangItem(scrapy.Item):
            # define the fields for your item here like:
            # name = scrapy.Field()
            title = scrapy.Field();
            money = scrapy.Field();
    3、pipeline.py修改代码   
        import sqlite3
    
    
        class ZufangPipeline(object):
            def process_item(self, item, spider):
                print(spider.name, "Spider pipeline")
                return item
    
            def open_spider(self, spider):
                self.con = sqlite3.connect("zufang.sqlite")
                self.cn = self.con.cursor()
    
            def process_item(self, item, spider):
                print(item)
                insert_sql = 'insert into zufang(title, money) values("{}", "{}")'.format(item["title"], item["money"])
                # insert_sql = 'insert into zufang(title, money) values("{}", "{}")'.format("title", 2500)
                print(insert_sql)
                self.cn.execute(insert_sql)
                self.con.commit()
                return item
    
            def spider_close(self, spider):
                self.con.close()
    4、setting.py中修改使pipeline生效
        ITEM_PIPELINES = {
           'zufang.pipelines.ZufangPipeline': 300,
        }
    

    五、执行爬虫 (项目目录下执行)退到与工程同一目录下:
    scrapy crawl zufang

  • 相关阅读:
    jquery 添加关键字小插件
    打印出所有每一位都与其他位不重复的自然数
    尾递归版,斐波那契数列
    如何在移动端宽度自适应实现正方型?
    css隐藏元素的六类13种方法
    如何给行内元素设置宽高?
    css实现垂直水平居中的方法
    pwa
    目录树生成工具treer
    服务端返回的json数据,导致前端报错的原因及解决方法
  • 原文地址:https://www.cnblogs.com/programer-xinmu78/p/11147016.html
Copyright © 2020-2023  润新知