zoukankan      html  css  js  c++  java
  • 04 蜘蛛spider

    概述:
    Spider定义如何爬取某个网站, 包括爬取的动作, 以及如何从网页的内容中提取结构化数据.
    # -*- coding: utf-8 -*-
    import scrapy
    from tutorial.items import QuoteItem
    
    class QuotesSpider(scrapy.Spider):
        name = 'quotes'
        allowed_domains = ['quotes.toscrape.com']
        start_urls = ['http://quotes.toscrape.com/']
    
        def parse(self, response):
            quotes = response.css('.quote')
            for quote in quotes:
    
                Item = QuoteItem()
    
                Item['text'] = quote.css('.text::text').extract_first()
                Item['author'] = quote.css('.author::text').extract_first()
                Item['tags'] = quote.css('.tags .tag::text').extract()
    
                yield Item  #如此一来, 首页的所有内容被解析出来, 并被赋值成了一个个QuoteItem
    
                next = quote.css('.pager .next a::attr(href)').extract_first()
                url = response.urljoin(next)
                yield scrapy.Request(url=url, callback=self.parse)
                #第一句代码首先通过CSS选择器获取下一个页面的链接, 即要获取超链接a中的属性,这里用到了 ::attr(href) 操作
                #然后调用 extract_first() 方法获取内容
                #第二句调用urljoin方法, 将相对url构造成一个绝对url, 例如: 获取到的下一页的地址是 /page/2, urljoin方法处理后的到的结果就是
                #http://quotes.toscrape.com/page/2/
                #第三句通过url 和 callback变量构造了一个新的请求, 回调函数callback依然使用 parse()方法, 这个请求完成后,响应会重新经过parse方法处理,得到第二页的解析结果,然后生成第二页的下一页, 也就是第三页的请求, 这样爬虫就进入了一个循环, 直到最后一页.
    
  • 相关阅读:
    Xn数列(codevs 1281)
    素数密度(洛谷 1835)
    Sightseeing(poj 3463)
    线段树——Ultra-QuickSort
    最大子矩阵
    完成作业的先后顺序
    堆积木块的最大高度
    最长上升序列和
    最长上升子序列
    高精度乘法程序
  • 原文地址:https://www.cnblogs.com/zhangjian0092/p/11693113.html
Copyright © 2011-2022 走看看