當然,我們也可以自己寫 .py 檔案,不過,下面我們要介紹使用 Scrapy 的模闆來生成爬蟲檔案的方法。
在 iTerm2 中輸入:
scrapy genspider iqianyue http://iqianyue.com/
從上圖中,我們可以看到,預設,使用模闆 “basic” 建立了 spider “iqianyue”,程式在 spiders 檔案夾下就生成了模闆檔案:
# -*- coding: utf-8 -*-
import scrapy
class IqianyueSpider(scrapy.Spider):
name = "iqianyue"
allowed_domains = ["http://iqianyue.com/"]
start_urls = ['http://http://iqianyue.com//']
def parse(self, response):
pass
下面,我們對爬蟲的檔案修改如下:
# -*- coding: utf-8 -*-
import scrapy
from douban.items import MyFirstItem
class IqianyueSpider(scrapy.Spider):
name = "iqianyue"
allowed_domains = ["http://iqianyue.com/"]
start_urls = ['http://www.iqianyue.com/articles/423525e6',
'http://www.iqianyue.com/articles/43c364c8',
'http://www.iqianyue.com/articles/3601e6c2']
def parse(self, response):
item = MyFirstItem()
item["urlname"] = response.xpath("/html/head/title/text()")
print(item["urlname"])
同時,對 items.py 檔案添加:
class MyFirstItem(scrapy.Item):
urlname = scrapy.Field()
urlkey = scrapy.Field()
urlcr = scrapy.Field()
urladdr = scrapy.Field()
然後執行指令:
scrapy crawl iqianyue --nolog
說明:crawl 就是開始爬取的意思,“iqianyue” 是 IqianyueSpider 中 name 屬性的值。
下面,我們回答一個問題:為什麼定義了
start_urls
屬性,就預設定義了起始的網址呢?
我們看一看 scrapy.Spider 這個類的源代碼就知道了。
# -*- coding: utf-8 -*-
import scrapy
from douban.items import MyFirstItem
class IqianyueSpider(scrapy.Spider):
name = "iqianyue"
allowed_domains = ["http://iqianyue.com/"]
start_urls = ['http://www.iqianyue.com/articles/423525e6',
'http://www.iqianyue.com/articles/43c364c8',
'http://www.iqianyue.com/articles/3601e6c2']
# 第 1 步:定義了新的屬性
custom_urls = ("https://www.jd.com/",
"http://www.sina.com.cn/",
"http://www.163.com/")
# 第 2 步:重寫了 start_requests() 方法
def start_requests(self):
# 在該方法中将起始網址設定從新屬性 url2 中讀取
for url in self.custom_urls:
# 第 3 步:調用了預設的 make_requests_from_url()
# 方法生成了具體請求,并通過 yield 傳回
yield self.make_requests_from_url(url)
def parse(self, response):
item = MyFirstItem()
item["urlname"] = response.xpath("/html/head/title/text()")
print(item["urlname"])