zoukankan      html  css  js  c++  java
  • 爬虫-scrapy初试

    初步操作:

    scrapy startproject hello (创建hello项目)
    scrapy genspider chouti  dig.chouti.com 创建一个spider
    scrapy crawl chouti运行spider  指定运行chouti这个项目
     
     
    import scrapy
    import sys
    import io
    sys.stdout=io.TextIOWrapper(sys.stdout.buffer,encoding='gb18030')
    from scrapy.selector import Selector,HtmlXPathSelector
    from scrapy.http import Request
    from ..items import WormItem
    引用
     
    进到spider 里面 写 chouti.py
    域名已经 被程序写好 
    内容都在response里面,
    我们直接通过选择器 去拿就行
    from scrapy.selector import Selector,HtmlXPathSelector

    #拿到单页的所有标签
            item_list=Selector(response=response).xpath('//div[@id="content-list"]/div[@class="item"]')
            for item in item_list:
                title=item.xpath('.//a[@class="show-content color-chag"]/text()').extract_first().strip()
                chouti_url=item.xpath('.//a[@class="show-content color-chag"]/@href').extract_first().strip()
                # a_list=item.xpath('.*//a[@class="show-content"]/text()').extract_first()
                item_obj=WormItem(title=title,url=chouti_url)
                return item_obj
    抽屉文章的url 和title
    然后需要翻页;
    原理就是拿到当前页面 所有的 页面链接的值,然后去重
    在 类属性里面定义一个 空set() ,因为 程序启动 只会执行一次类方法,所以不用担心被覆盖

    拿到那些地址后,交给回调函数 重复操作
    #拿页码
            #拿本页的所有页码
            page_l=Selector(response=response).xpath('//div[@id="dig_lcpage"]//a/@href').extract()
    
            for page in page_l:
                page = 'http://dig.chouti.com' + page
                #判断是不是重复
                if page not in self.url_set:
                    self.url_set.add(page)
                    #回调,   知识点: 类属性只有在程序执行的时候会加载,所以  类属性 url_set 不会刷掉
                    yield Request(url=page,callback=self.parse)
    拿页码
    类属性:
    class ChoutiSpider(scrapy.Spider):
    name = 'chouti'
    allowed_domains = ['dig.chouti.com']
    start_urls = ['http://dig.chouti.com/']
    url_set=set()


    setttings中 放开注释: ##########不同的项目名称 关键字也不同
    SPIDER_MIDDLEWARES = {
    'worm.middlewares.WormSpiderMiddleware': 543,
    }


    item:
    class WormItem(scrapy.Item):
        # define the fields for your item here like:
        # name = scrapy.Field()
        title=scrapy.Field()
        url=scrapy.Field()
    item



     
     
     
     
     
     
     
  • 相关阅读:
    .NET 开源GIS解决方案一 概述
    未能正确加载“Microsoft.VisualStudio.Editor.Implementation.EditorPackage”包
    C# Winform欢迎窗体实现()
    Log4Net使用指南(转)
    DotNet经典面试题(转载)
    这是一篇测试文章
    每天进步一点点
    博客园公告栏添加两个有趣的控件
    eclipse下查看maven下载的源码中文乱码问题
    WEB 基础知识(一)
  • 原文地址:https://www.cnblogs.com/onda/p/7687427.html
Copyright © 2011-2022 走看看