在cmd里面输入
在ide里面修改books.py文件
-----------------------------------------------------------------------------------------------------------
# -*- coding: utf-8 -*-
import scrapyclass BooksSpider(scrapy.Spider):
#爬虫唯一标识
name = 'books'
#入口点
start_urls = ['http://books.toscrape.com/']
#解析页面,1.提取页面中的数据,2、提取页面中的链接
#页面解析函数通常被实现成一个生成器函数,
#每一项从页面中提取的数据和每个链接页面的下载请求都由yield语句提交给scrapy引擎
def parse(self, response):
for book in response.css('article.product_pod'):
name = book.xpath('./h3/a/@title').extract_first()
price = book.css('p.price_color::text').extract_first()
yield{
'name':name,
'price':price,
}
#提取链接
next_url = response.css('ul.pager li.next a::attr(href)').extract_first()
if next_url:
#如果找到下一页的URL,得到绝对路径,构造新的对象
#urljoin用于构造绝对url
next_url = response.urljoin(next_url)
yield scrapy.Request(next_url,callback = self.parse)
--------------------------------------------------------------------------------------------------------------------------------
在cmd里面输入
小结:页面解析函数是通过callback参数指定的回调函数,返回一个迭代对象,每次迭代返回一项数据或者一个request对象
在实际应用中,我们几乎只调用request的构造器创建对象,但也可以根据需求访问request对象的属性,常用的如下:
url method headers body meta
HtmlReaponse对象有很对属性,但是常用的有:
xpath(query)
css(query)
urljoin(url)
实现一个spider只需要完成4个步骤
1. 继承scrapy.Spider
2. 为Spider取名
3. 设定起始爬取点
4.实现页面解析函数
实现start_Requests方法,代替start_urls类的属性,覆盖基类Spider的start_requests方法,直接构造并提交起始爬取点的request对象
def start_requests(self):yield scrapy.Request('http://books.toscrape.com/',
callback = self.parse_book,
headers = {'User-Agent':'Mozilla/5.0'}
dont_filter=True)
def parse_book(response):