Scrapy爬虫框架 模板 及 笔记。

import scrapy  # 导入scrapy


# 创建爬虫类 并且继承自scrapy.Spider -->  最基础的类  另外几个各类都是继承自这个类
class ProxySpider(scrapy.Spider):
    name = 'proxy'  # 爬虫名字--> 必须唯一
    allowed_domains = ['cn-proxy.com']  # 允许采集的域名
    start_urls = [f'http://cn-proxy.com/{page}' for page in range(1,3685)]  # 开始采集的网站
    # start_urls = ['http://cn-proxy.com/' for page in range(1, 3685)]  # 开始采集的网站

    # 解析响应数据 提取数据 或者网址等 response 就是网页源码
    def parse(self, response):

        #提取数据

        #提取ip 和 port
        selectors = response.xpath('//tr')  #选择所有的tr标签
        #循环遍历tr标签下的td标签
        for selector in selectors:
            ip = selector.xpath('./td[1]/text()').get()  #(单个) .表示在当前节点下继续选择 和 selectors
            port = selector.xpath('./td[2]/text()').get()

            # ip = selector.xpath('./td[1]/text()').getall()  #(多个) .表示在当前节点下继续选择 和 selectors
            # port = selector.xpath('./td[2]/text()').get()

            # ip = selector.xpath('./td[1]/text()').extract_first()  # .表示在当前节点下继续选择 和 selectors
            # port = selector.xpath('./td[2]/text()').extract_first()

            # print(ip,port)
            items = {
     
                "ip":ip
                "port":port
            }
            yield  items
        #翻页操作  寻找翻页的网址标签
        next_page = response.xpath('//a[@class="next_page"]/@href').get()
        if next_page:
            print(next_page)
            #拼接网址
            # next_url = "http://cn-proxy.com/" + next_page
            next_url = response.urljojin(next_page)
            #发出请求  Requext calback 是回调函数 就是将请求得到的响应交给自己处理

            yield  scrapy.Request(next_url,callback=self.parse)  #生成器  递归



[Scrapy入门]
    *scrapy是框架 类似于车子 原则上来说会开车就行 但是作为爬虫工程师来说还得会修车 改装
    *采用异步框架 实现高效率的网络采集(并发等)
    *最强大的爬虫框架 没有之一
    
[Scrapy安装]
    * pip install scrapy -> VC++14.0 Twisted(关键字)
        解决方法:离线安装 pip install xxx.whl
    *scrapy bench 测试是否真正安装成功      报错 ———> win32
        解决放法:pip install pywin32
    *报错 automat 20.2.0 has requirement attrs>=19.2.0, but you'll have attrs 18.1.0 which is incompatible.
        解决方法 pip install attrs==19.3    pip install scrapy

[Scrapy入门实战案例]
    采集目标:ip代理  包括 ip port
    
    1 新建项目
    scrapy startproject xxxxSpider(项目名字)
    
    2 创建爬虫
    scrapy genspider xxxx(爬虫名字)   xxxxxx.com(域名)
        
        注意:
            *爬虫名字不要和项目名字一样
            *网站域名是允许爬虫采集的域名
                - baidu.com   zhihu.com                 
        [解释爬虫文件]
            import scrapy #导入scrapy
            
                      
            # 创建爬虫类 并且继承自scrapy.Spider -->  最基础的类  另外几个各类都是继承自这个类
            class ProxySpider(scrapy.Spider):
                name = 'proxy'  # 爬虫名字--> 必须唯一
                allowed_domains = ['cn-proxy.com']  # 允许采集的域名
                start_urls = ['http://cn-proxy.com/']  # 开始采集的网站

                # 解析响应数据 提取数据 或者网址等 response 就是网页源码
                def parse(self, response):
                    pass
    3 分析网站
        *提取数据
            - 正则表达式(基础 必会 难掌握)
            - XPath --> 从HTML中提取数据
            - CSS --> 从HTML中提取数据
            
            - response.xpath(xpath语法).get()
            - get() 是得到一个元素
            -getall() 是多个元素
    4 运行爬虫
        scrapy crawl xxxx(爬虫名字)
        
        Request()发出请求 类似于requests.get()
        callvack 是将发出去的请求得到的响应还交给自己处理
        注意:回调函数不要写() 只写函数名
        
        
        执行并保存数据
        scrapy crawl xxxx(爬虫名字) -o xx(文件名).json         JSON格式
        scrapy crawl xxxx(爬虫名字) -o xx(文件名).csv          csv格式

你可能感兴趣的:(python)