start_requests


start_requests

 簡化前,我們需要定義一個方法:start_requests(self),然后經過這個方法不斷循環發送請求:

 def start_requests(self): 
        urls = [ 
            'http://lab.scrapyd.cn/page/1/',
            'http://lab.scrapyd.cn/page/2/',
        ]
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse) 


簡化后,以上的鏈接可以寫在:start_urls這個常量里面,是不是省了好多事,人生是不是又美滿了一大截?

    start_urls = [  # 另外一種寫法,無需定義start_requests方法
        'http://lab.scrapyd.cn/page/1/',
        'http://lab.scrapyd.cn/page/2/',
    ]

但是!上帝給你開一扇門,就會給你關另一扇門,用簡化的方法,我們必須定義一個方法為:def parse(self, response),方法名一定是:parse,這樣的話用簡寫的方式就能愉快的工作了
完整代碼如下:

"""
    scrapy初始Url的兩種寫法,
    一種是常量start_urls,並且需要定義一個方法parse()
    另一種是直接定義一個方法:star_requests()
"""
import scrapy
class simpleUrl(scrapy.Spider):
    name = "simpleUrl"
    start_urls = [  #另外一種寫法,無需定義start_requests方法
        'http://lab.scrapyd.cn/page/1/',
        'http://lab.scrapyd.cn/page/2/',
    ]

    # 另外一種初始鏈接寫法
    # def start_requests(self):
    #     urls = [ #爬取的鏈接由此方法通過下面鏈接爬取頁面
    #         'http://lab.scrapyd.cn/page/1/',
    #         'http://lab.scrapyd.cn/page/2/',
    #     ]
    #     for url in urls:
    #         yield scrapy.Request(url=url, callback=self.parse)
    # 如果是簡寫初始url,此方法名必須為:parse

    def parse(self, response):
        page = response.url.split("/")[-2]
        filename = 'mingyan-%s.html' % page
        with open(filename, 'wb') as f:
            f.write(response.body)
        self.log('保存文件: %s' % filename)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM