爬虫程序的流程
下载页面-->提取页面中的数据-->提取页面中的链接-->URL去重
Scrapy简介及安装
在任意操作系统下,可以使用pip安装Scrapy,例如:
$pip install scrapy
为确认Scrapy已安装成功,首先在Python中测试能否导入Scrapy模块:
>>> import scrapy
>>> scrapy.version_info
(1, 3, 3)
通过了以上两项检测,说明Scrapy安装成功了。Scrapy安装过程中可能会遇到一些问题,可能还要
安装win32api、lxml等,应根据报错内容百度相应的方法可以解决,也有可能环境缺少安装包,安装即可
编写Scrapy爬虫
爬取http://books.toscrape.com网站中取书籍信息,这样的书籍列表页面一共有50页,每页有20本书,第一个例子应尽量简单。我们下面以这个项目仅爬取所有图书(1000本)的书名和价格信息。
1.创建项目:在命令行输入scrapy startproject example
使用tree查看目录结构:tree
2.分析页面,一般用xpath或者css得到元素
3.实现Spider
实现爬虫的Python文件应位于exmaple/spiders目录下,在该目录下创建 新文件book_spider.py。然后,在book_spider.py中实现爬虫BooksSpider,
代码如下:
import scrapy
class BooksSpider(scrapy.Spider):
name = "books"
start_urls = ['http://books.toscrape.com/']
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()
print(next_url)
if next_url:
next_url = response.urljoin(next_url)
yield scrapy.Request(next_url, callback=self.parse)
上述代码注解:
name属性
一个Scrapy项目中可能有多个爬虫,每个爬虫的name属 性是其自身的唯一标识,在一个项目中不能有同名的爬虫,本例中的爬虫取名为'books',这个是在运行时需要用到。
start_urls属性
一个爬虫总要从某个(或某些)页面开始爬取,我们称 这样的页面为起始爬取点,start_urls属性用来设置一个 爬虫的起始爬取点。在本例中只有一个起始爬取 点'http://books.toscrape.com'。
parse方法
当一个页面下载完成后,Scrapy引擎会回调一个我们指定的页面解析函数