zoukankan      html  css  js  c++  java
  • # scrapy(二):get请求

    scrapy中的get请求及基本使用:

    1. 创建scrapy项目

    scrapy startproject QiuBaiProject
    

    2. 创建爬虫文件

    scrapy genspider QiuBai  www.qiubai.com
    

    3.修改配置文件

    """
    setting.py :配置文件
    """
    
    # Crawl responsibly by identifying yourself (and your website) on the user-agent
    USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36'
    
    # Obey robots.txt rules
    ROBOTSTXT_OBEY = False
    ITEM_PIPELINES = {
    	#使用哪个管道处理,后面是管道优先级 1-1000,数字越低,优先级越高
       'qiubaiproject.pipelines.QiubaiprojectPipeline': 300,
    }
    
    """
    关于日志的说明:默认显示的等级是DEBUG,上面所有的信息全部显示
    如果等级配置为ERROR,那么就只显示ERROR,CRITICAL
    在配置文件中进行配置
    """
    	# 配置显示日志信息等级
    	# LOG_LEVEL = 'ERROR'
    	# 不将信息显示到屏幕中,将信息显示到文件中
    	LOG_FILE = 'log.txt'
    

    4. 编写item.py文件

    """
      items.py : 这里面是定义数据结构的地方
    """
    
    import scrapy
    
    
    class QiubaiprojectItem(scrapy.Item):
      """
    	item对象的用法和字典的用法一模一样,可以快速的转化为字典
      """
        # define the fields for your item here like:
        # name = scrapy.Field()
        # 图片链接
        image_src = scrapy.Field()
        # 用户名
        name = scrapy.Field()
        # 年龄
        age = scrapy.Field()
        # 内容
        content = scrapy.Field()
        # 好笑个数
        haha_count = scrapy.Field()
        # 评论个数
        ping_count = scrapy.Field()
    

    5. 编写爬虫文件

    # -*- coding: utf-8 -*-
    '''
    QiuBai.py 爬虫文件
    '''
    
    import scrapy
    from qiubaiproject.items import QiubaiprojectItem
    
    
    class QiubaiSpider(scrapy.Spider):
        name = 'qiubai'
        allowed_domains = ['www.qiushibaike.com']
        
        #起始页
        start_urls = ['http://www.qiushibaike.com/']
    
        # 爬取其他页面的内容
        url = 'https://www.qiushibaike.com/8hr/page/{}/'
        page = 1
    
        def parse(self, response):
            # 先找到所有的div
            div_list = response.xpath('//div[@id="content-left"]/div')
            # 遍历这个div的列表,依次获取里面的每一条信息
            for odiv in div_list:
                # 创建对象
                item = QiubaiprojectItem()
                # 用户头像
                face = 'https:' + odiv.xpath('.//div[1]//img/@src')[0].extract()
                # 用户的名字
                name = odiv.xpath('.//div[1]//h2').extract()[0]
                # 用户的年龄
                age = odiv.xpath('.//div[starts-with(@class,"articleGender")]').extract_first()
                # 获取用户内容
                ospan = odiv.xpath('.//div[@class="content"]/span[1]')[0]
                content = ospan.xpath('string(.)').extract()
                # 用户的好笑个数
                haha_count = odiv.xpath('.//div[@class="stats"]/span[@class="stats-vote"]/i/text()').extract()[0]
                # 获取评论个数
                ping_count = odiv.xpath('.//div[@class="stats"]/span[@class="stats-comments"]//i/text()').extract()[0]
    
                # 将提取的信息保存起来
                item['image_src'] = face
                item['name'] = name
                item['age'] = age
                item['content'] = content
                item['haha_count'] = haha_count
                item['ping_count'] = ping_count
                
                yield item
            # 接着爬取其他的页面
            if self.page <= 5:
                self.page += 1
                # 拼接出来指定的url
                url = self.url.format(self.page)
                # 接着发送请求,callback是发送请求之后,用哪一个回调函数处理这个请求
                yield scrapy.Request(url=url, callback=self.parse)
    

    6.编写管道文件

    # -*- coding: utf-8 -*-
    
    # Define your item pipelines here
    #
    # Don't forget to add your pipeline to the ITEM_PIPELINES setting
    # See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html
    import json
    
    class QiubaiprojectPipeline(object):
        # 爬虫启动的时候只会调用一次
        def open_spider(self, spider):
            # 将文件的打开写道这里
            self.fp = open('qiubai.json', 'w', encoding='utf8')
    
        # 这个函数就是处理item的函数,每一个item过来都会回调这个方法
        def process_item(self, item, spider):
            # 将对象转化为字典
            obj = dict(item)
            # 将字典转化为json格式字符串
            string = json.dumps(obj, ensure_ascii=False)
            self.fp.write(string + '
    ')
            return item
    
        # 爬虫结束的时候回调这个方法
        def close_spider(self, spider):
            self.fp.close()
    
  • 相关阅读:
    【用例篇】Xmind转为csv 导入禅道
    idea替换当前文件内容
    配置IDEA项目JDK环境
    git 只提交部分修改文件
    `总结TESTNG与JUNIT的异同
    POST请求BODY格式区别
    【转】使用AllureReport生成测试报告
    Springboot+Redis 配置和使用
    【转】git branch 命令查看分支、删除远程分支、本地分支
    [转]Json字符串和map和HashMap之间的转换
  • 原文地址:https://www.cnblogs.com/lpdeboke/p/12964922.html
Copyright © 2011-2022 走看看