安装 :
pip install scrapy(网上说直接装会有依赖问题,不知道我是以前已经装好了依赖还是安装的时候自动下了其他依赖)
创建项目 :
scrapy startproject 项目名称
编写项目代码 :
在项目中的spider文件夹内创建一个新的py文件并引入scrapy
而后编写一个class 继承scrapy.Spider类并重写start_request 和 parse方法
请求url代码回调具体逻辑在重写的parse进行scrapy.Request(url=url, callback=self.parse)
import scrapy
class itest(scrapy.Spider):
name = "itest" #定义爬虫名字
def start_requests(self):
urls = ['https://againriver.com'] #定义请求地址,可以多个
for url in urls:
yield scrapy.Request(url=url, callback=self.parse) #访问请求地址
def parse(self, response):
filename = "index.html" # 自定义文件名称
with open(filename, 'wb') as f:
f.write(response.body) #把访问到的数据写入文件
self.log("保存文件:%s" % filename)
编写完成后打开命令行进入项目根目录输入scrapy crawl 上面代码中定义的爬虫名字这里是itest
总结:一开始把自定义的name写在itest类上面时,无法运行爬虫,报的爬虫itest不存在,而当我把name写在itest类里面时则运行成功。事实证明我还是不够细心,以后要多注意。
简化写法:
class itest(scrapy.Spider):
name = "itest"
# def start_requests(self):
# urls = ['https://againriver.com']
# for url in urls:
# yield scrapy.Request(url=url, callback=self.parse)
start_urls = ['https://againriver.com']
def parse(self, response):
filename = "index.html"
with open(filename, 'wb') as f:
f.write(response.body)
self.log("保存文件:%s" % filename)
可以使用start_urls = ['https://againriver.com']代替了start_requests函数。(实际上就是使用默认的start_requests函数,并且该方法默认callback为parse函数,也就是说如果简写的话必须要声明parse函数,不然报callback is not defind错误)