本文用 Scrapy 爬虫框架爬取专门供爬虫初学者训练用的网站:http://books.toscrape.com/
打开虚拟环境,创建项目文件
打开控制台,输入workon py3scrapy
进入虚拟环境所在盘(我的是E盘)
创建项目文件,输入scrapy startproject demo
(创建的项目文件叫demo)
在E盘可以找到所创建的文件夹。
查看项目目录下的文件,输入tree/F demo
好,到此项目文件就创建成功了。
打开所爬取网站,分析所爬取的内容。
可以看出,每一本书的信息包裹在<article class="product_pod">
元素内
书名信息在其下的 **h3** > a元素的 **title** 属性中
。
书价信息在其下<p class="price_color">£51.77</p>
的文本中。
由于这个网页有50页,下一页的URL在 ul.pager>li.next>a元素的href属性中
如:<li class="next"><a href="catalogue/page-2.html">next</a></li>
编写代码,实现爬虫
在spider
目录下,创建一个book_spider.py
文件。
运行无错误。
代码如下:
# -*- coding:utf-8 -*-
import scrapy
class BooksSpider(scrapy.Spider):
#爬虫唯一标识
name = "books"
#爬取的起始点
start_urls = ['http://books.toscrape.com/']
def parse(self, response):
#提取信息
for book in response.css('article.produce_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,得到绝对路径,构造新的Request对象
next_url = response.urljoin(next_url)
yield scrapy.Request(next_url, callback = self.parse)
运行代码,抓取数据
在控制台输入scrapy crawl books -o books.csv
回车
等程序运行完,在demo文件夹里可以找到:
好,抓取完毕。