美文网首页
scrapy框架案例分析

scrapy框架案例分析

作者: 拼了老命在学习 | 来源:发表于2020-09-24 17:06 被阅读0次
    作为一名爬虫爱好者,虽然requests库已经足够我们做一些简单的小爬虫,selenium能帮助我们模仿浏览器行为,但学会使用框架能帮助我们更加便捷高效的完成爬取任务。

    案例分析:爬取宝马五系汽车图片

    1.新建一个爬虫项目

    scrapy startproject bw
    cd bw
    scrapy genspider bw5 "XXXXXXX域名"
    

    2.在item.py中创建三个容器

    import scrapy
    
    
    class BwItem(scrapy.Item):
        # define the fields for your item here like:
        # name = scrapy.Field()
        title = scrapy.Field() #装子分类名字
        image_urls = scrapy.Field() #装图片链接
        images = scrapy.Field()
    

    3.在爬虫文件bw5.py中导入BwItem并解析网页

    import scrapy
    from bw.items import BwItem
    
    class Bw5Spider(scrapy.Spider):
        name = 'bw5'
        allowed_domains = ['car.autohome.com.cn']
        start_urls = ['https://car.autohome.com.cn/pic/series/65.html']
    
        def parse(self, response):
            uiboxs = response.xpath("//div[@class='uibox']")[1:]
            for uibox in uiboxs:
                title = uibox.xpath(".//div[@class='uibox-title']/a/text()").get()
                urls = uibox.xpath(".//div[@class='uibox-con carpic-list03']/ul/li/a/img/@src").getall()
                # for x in urls:
                #     url = response.urljoin(x)
                #     print(url)
                #获取所有图片url
                urls = list(map(lambda url:response.urljoin(url),urls))
                item = BwItem(title=title,image_urls=urls)
                yield item
    

    4.scrapy框架中帮我们写好了异步下载程序,只需按步骤打开下载器开关配置相应路径即可

    当使用File Pipeline下载文件的时候,按照以下步骤来完成:
    1.定义好一个Item,然后在这个item中定义两个属性,分别为file_urls以及files 。file_urls是用来存储需要下载的文件的url链接,需要一个列表
    ⒉.当文件下载完成后,会把文件下载的相关信息存储到item的files属性中。比如下载路径、下载的url和文件的校验码等。
    3.在配置文件 settings.py中配置FILEs_STORE,这个配置是用来设置文件下载下来的路径。
    4.启动pipeline在ITEN_PIPELNES中设置scrapy.pipelines.files.FilesPipeline:1.
    下载图片的Images Pipeline:
    1.定义好一个Item,然后在这个item中定义两个属性,分别为image_urls以及images 。image_urls是用来存储需要下载的文件的url链接,需要一个列表
    ⒉.当文件下载完成后,会把文件下载的相关信息存储到item的images属性中。比如下载路径、下载的url和文件的校验码等。
    3.在配置文件 settings.py中配置IMAGES_STORE,这个配置是用来设置文件下载下来的路径。
    4.启动pipeline在ITEN_PIPELNES中设置scrapy.pipelines.images.ImagesPipeline:1
    

    若有下载要求,需要在pipelines.py中重写相关方法

    import os
    from urllib import request
    from scrapy.pipelines.images import ImagesPipeline
    from bw import settings
    
    class BwImagesPipeline(ImagesPipeline):#继承父类ImagesPipeline
        def get_media_requests(self, item, info):#重写父类方法
            request_objs = super(BwImagesPipeline,self).get_media_requests(item,info)
            for request_obj in request_objs:
                request_obj.item = item
            return request_objs
        def file_path(self, request, response=None, info=None):
            path = super(BwImagesPipeline,self).file_path(request,response,info)
            title = request.item.get("title")
            images_store = settings.IMAGES_STORE
            title_path = os.path.join(images_store,title)
            if not os.path.exists(title_path):
                os.mkdir(title_path)
            image_name = path.replace("full/","")
            image_path = os.path.join(title_path,image_name)
            return image_path
    

    5.在setting.py中开启相关设置

    # Obey robots.txt rules
    ROBOTSTXT_OBEY = False #关闭机器人协议
    #设置默认请求头
    DEFAULT_REQUEST_HEADERS = {
      'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
      'Accept-Language': 'en',
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36',
    }
    #开启item_pipelines
    ITEM_PIPELINES = {
       # 'bw.pipelines.BwPipeline': 300,
       #  'scrapy.pipelines.images.ImagesPipeline':1,
        'bw.pipelines.BwImagesPipeline':1,
    }
    #图片下载路径,供image pipelines使用
    IMAGES_STORE = os.path.join(os.path.dirname(os.path.dirname(__file__)),'images')
    

    6.在工程目录下创建start.py文件以启动爬虫

    from scrapy import cmdline
    cmdline.execute("scrapy crawl bw5".split())
    

    效果图

    总结:相比普通爬虫,scrapy框架的运行速率,下载速率都更快,效率更高,学会使用框架能提高我们的效率,特别是爬取的数据较多的情况下。

    相关文章

      网友评论

          本文标题:scrapy框架案例分析

          本文链接:https://www.haomeiwen.com/subject/gottuktx.html