目的
在http://books.toscrape.com/
爬取书本的信息:
注意1:chrome分析中会出现copyxpath抓取出错的问题,去掉xpath中的tbody即可
注意2:chrome copy定位到具体的那个点,如果要爬取全部的信息请注意元素后面[]中的内容
例如:
1 | 该xpath只能爬取第一个li元素下的article元素(chrome xpathcopy) |
scrapy shell <url> --nolog
,例如在我们的例子中:
1 | MacBook-Pro:pachong mac$ scrapy shell http://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html --nolog |
fetch(req_or_url)
该函数用于下载页面,可传入一个Request对象或一个url字符串,调用后更新request和response
view(response)
该函数用于在浏览器中显示response所包含的页面
分析页面数据
接下来我们调用view()函数,在浏览器中显示response所包含的页面
1 | In [1]: view(response) |
分析页面链接
接下来分析如何在书籍列表中提取每一个书籍页面的链接,使用fetch()
函数
1 | In [1]: fetch('http://books.toscrape.com/') |
1 | 导包 |
编码实现
上面我们已经分析了这个页面我们所需要爬取的内容,获得了它对应的xpath或css,接下来我们要编码进行实现
- 创建Scrapy项目
1 | 创建Scrapy项目 |
我们可以在项目中看到已经创建好的books.py
它为我们继承了scrapy.Spider类,为spider取了名,指定了爬取的起始地址,需要我们自己实现书籍列表页面和书籍页面的解析函数
1 | # -*- coding: utf-8 -*- |
- 在
item.py
中封装我们需要爬取的信息
1 | class SecondBookItem(scrapy.Item): |
分析:我们爬取的页面是一个书籍列表页面,从该页面中我们可以获取每一本书籍的链接和下一页书籍列表页面的链接(NEXT)
books.py
1 | # -*- coding: utf-8 -*- |