安装Scrapy很是简单,只须要在终端输入pip install scrapy
,而后执行命令便可,若是不行,那么通常是底层库的问题,可使用codna install --upgrade scrapy
代替以前的命令,虽然anconda的库更新要慢一些,不过通常没什么问题css
请在命令行下scrapy startproject name
便可,示例以下,当咱们使用命令以后,scrapy就会帮咱们建立相应的项目:
python
这时候咱们能够tree一下,查看咱们的目录结构,其中的spider文件夹,就是咱们编写咱们本身的脚本的地方git
Scrapy 框架除了基本的Response,request,Downloader,等以外,其强大之处就是帮助咱们实现了几乎整个流程,在最基本的状况下,咱们甚至只须要编写十几行代码就能够完成一个爬虫.github
好比其中的item文件中编写的是对数据封装的方法框架
其中的pipline.py 是用来编写数据处理的方法的,在Spider中的咱们本身编写的spider执行以后,咱们就能够调用item中的方法对获取的数据进行处理,dom
而setting则是配置文件,除此以外咱们还可使用Scrapy提供给咱们的不少已经写好的方法,或者重写他们来实现一些咱们须要的功能,而这一切又都是很是简单的. scrapy
咱们这里再从github上Scrapy 的项目中下载一个demo,或者也能够从个人这个地址下载相应的内容,以后个人这个系列的代码都会放在这个地址ide
咱们tree一会儿这个文档,就能够查看到相应的内容,示例以下:函数
下面是其中的示例代码:网站
# -*- coding: utf-8 -*-
import scrapy
class BooksSpider(scrapy.Spider):
# 首先要继承原来额Spider方法
name = "books"
# 而后是name ,用于在终端中执行该脚本
# allowed_domains = ["books.toscrape.com"]
#
start_urls = [
'http://books.toscrape.com/',
]
# 咱们须要一个start url
def parse(self, response):
for book_url in response.css("article.product_pod > h3 > a ::attr(href)").extract():
yield scrapy.Request(response.urljoin(book_url), callback=self.parse_book_page)
# 而后是获取相应内容,并建立解析函数
next_page = response.css("li.next > a ::attr(href)").extract_first()
if next_page:
yield scrapy.Request(response.urljoin(next_page), callback=self.parse)
# 关键之处之一,找到下一个连接
def parse_book_page(self, response):
# 解析函数,咱们在Scrapy中使用,Selector与xpath选择器,css选择器与一些其余Python代码实现该功能
item = {}
product = response.css("div.product_main")
item["title"] = product.css("h1 ::text").extract_first()
item['category'] = response.xpath(
"//ul[@class='breadcrumb']/li[@class='active']/preceding-sibling::li[1]/a/text()"
).extract_first()
item['description'] = response.xpath(
"//div[@id='product_description']/following-sibling::p/text()"
).extract_first()
item['price'] = response.css('p.price_color ::text').extract_first()
yield item
至于,这份代码的详细解释,我会在以后的内容中给出,固然这份简单的demo是不能帮助咱们真正的入门的,咱们还须要一些其余内容,以后我会写更多的demo.
scrapy crawl name -o xxxxx.csv
,这时候咱们能够在刚刚的tree的路径下,继续执行爬虫的命令,效果如图:
图片上面是执行完毕后的留下的日志,而下面则是咱们刚刚执行的命令.
如今咱们就能够看看咱们获取的信息究竟是不是咱们的start_url了:
看来没什么问题