前置条件
- 成功部署的scrapy环境
- 安装pycharm
- 可以访问外网的一个代理(如果你的环境可以那么就可以不用了)
创建scrapy工程
-打开控制台窗口
-输入scrapy startproject tutorial,会自动生成一些文件目录结构。像这样子
编写爬虫主程序
-爬虫主程序的功能
爬取网页http://quotes.toscrape.com中所有文章的标题,作者,标签
-编写一个类(名字随意取)继承至scapy.Spider,这里我取名quotesSpider
-为爬虫类定义一个name属性,用于标识该爬虫类是全局惟一的。
-重写 start_requests方法
该方法要实现的功能有:yield 一个scrapy.Request(url,callback)实例。其中url,是要爬取的网页,callback 是解析函数名。我喜欢这种方式,scrapy有快捷方式。
-重写parse方法
该方法要实现的功能:通过response返回对象,获取到自己想到的内容,从而达到爬取数据的功能。具体获取数据方法是通过response 的selector对象
–安整代码
“`python
#coding:utf-8
__author__ = 'cong.tang'
import scrapy
class DmozSpider(scrapy.Spider):
name = "dmoz"
urls=[
'http://quotes.toscrape.com',
]
def start_requests(self):
for url in self.urls:
yield scrapy.Request(url,callback=self.parse)
def parse(self, response):
for quote in response.css("div.quote"):#这里通过css筛选器来创建一个selector
yield {
'text':quote.css('span.text::text').extract_first(),#导出selector对象中的第一个内容
'author':quote.css('small.author::text').extract_first(),
'tags':quote.css("div.tags a.tag::text").extract()#导出selector中的所有内容
}
next_page = response.css('li.next a::attr(href)').extract_first()#查看下一个文章的url
# if next_page is not None:
# next_page = response.urljoin(next_page)
#
# yield scrapy.Request(next_page,callback=self.parse)
# if next_page is not None:
# yield response.follow(next_page,callback=self.parse)
#自动对下一个url进行抓取,前题是文章的格式是一样的
for a in response.css('li.next a'):
yield response.follow(a, callback=self.parse)
“`
运行爬虫程序
-打开命立行执行 scrapy crawl dmoz(spider类中的定义的名字) -o output.json(生成一个json文件)
-查看运行结果如下