• 02.Scrapy-Demo


    Scrapy入门实战

    采集目标:采集西祠网的IP代理 包括 IP PORT

    1. 新建项目

    scrapy startproject xicidailiSpider
    # scrapy 新建项目  项目名
    

    2. 创建爬虫

    scrapy genspider xicidaili xicidaili.com
    # scrapy 产生爬虫  爬虫名字   网站域名
    # 注意:爬虫名字一定不能与项目名字一致!
    

    可以看到,在项目的spiders下得到了一个爬虫文件

    解释爬虫文件

    import scrapy # 导入scrapy
    
    # 创建爬虫类 并且继承自scrapy.Spider --> 爬虫最基础的类
    # 另外几个类都是继承自这个类
    class XicidailiSpider(scrapy.Spider):
        #爬虫名字 --> 必须唯一
        name = 'xicidaili'	
        # 允许采集的域名
        allowed_domains = ['xicidaili.com'] 
        # 开始采集的网站
        start_urls = ['http://xicidaili.com/']
    	# 解析响应数据 提取数据 或者网址等 response就是网页源码
        def parse(self, response):
            pass
    

    3. 分析网址

    • 提取数据

      • 正则表达式(基础 必回 难掌握)
      • XPath --> 从HTML中提取数据语法
      • CSS --> 从HTML中提取数据语法

      • response.xpath("xpath语法").get()

        get() 是得到一个元素

        getall() 是多个元素

      class XicidailiSpider(scrapy.Spider):
          name = 'xicidaili'
          allowed_domains = ['xicidaili.com']
          start_urls = ['https://www.xicidaili.com/nn/']
          # start_urls = [f'https://www.xicidaili.com/nn/{page}' for page in range(1,3685)]
      
          def parse(self, response):
              # 提取数据
              # response.xpath("//tr/td[2]/text()")
              selectors = response.xpath("//tr")
              for selector in selectors:
                  ip = selector.xpath("./td[2]/text()").get() # . 在当前节点下继续选择
                  port = selector.xpath("./td[3]/text()").get()
      
                  # ip = selector.xpath("./td[2]/text()").extract_first()  # 与get等价
                  # port = selector.xpath("./td[3]/text()").extract_first()
                  print(ip,port)
      

    4. 运行爬虫

    scrapy crawl 爬虫名字
    
    		# 翻页操作
            next_page = response.xpath('//a[@class="next_page"]/@href').get()
            if next_page:
                print(next_page)
                # 拼接网址
                next_url = response.urljoin(next_page)
                yield scrapy.Request(next_url,callback=self.parse) # yield 生成器
                
    # Request() 发送请求 类似requests.get() 
    # callback 是回调函数 将发出去的请求得到的响应还交给自己(self.parse)处理
    # 注意:回调函数不要写() 只写方法名字
    
  • 相关阅读:
    Lua笔记——8.Lua & C
    Shader笔记——5.渲染纹理
    常用工具——2.Mac
    Shader笔记——4.纹理基础
    设计模式学习笔记四:简单工厂模式抽象工厂模式工厂方法模式
    设计模式学习笔记三:策略模式和状态模式
    设计模式学习笔记二:单例模式
    设计模式学习笔记一:程序设计原则
    数据结构和算法学习笔记十六:红黑树
    数据结构和算法学习笔记十五:多路查找树(B树)
  • 原文地址:https://www.cnblogs.com/yanadoude/p/13186446.html
Copyright © 2020-2023  润新知