互联网爬虫:使用Scrapy框架编写一个抓取书籍新闻的爬虫服务,爬虫scrapy

  下七日攻读了BeautifulSoup的基础知识并用它完毕了三个网络爬虫(
使用Beautiful Soup编写三个爬虫 连串散文汇总 ),
BeautifulSoup是贰个十分流行的Python互连网抓取库,它提供了贰个基于HTML结构的Python对象。
即便简单易懂,又能蛮好的管理HTML数据,但是相比Scrapy来讲,BeautifulSoup有一个最大的重疾:慢。

Scrapy 是三个开源的 Python 数据抓取框架,速度快,庞大,并且选择简易。
来看贰个官方网址主页上的简练并完好的爬虫:
异步的,也正是说Scrapy不需求等一个央浼完毕能力管理下一条央求,而是同期提倡另一条供给。
并且,异步乞求的另叁个实惠是当有个别央求失利了,别的的伸手不汇合对震慑。
安装(Mac)

pip install scrapy

其他操作系统请参见完整安装指点:

Scrapy中几个供给驾驭的定义
Spiders
Spider类想要表达的是:怎么着抓取一个鲜明了的网站的数据。举例在start_urls里定义的去哪个链接抓取,parse()方法中定义的要抓取什么样的多少。
当一个Spider初叶实施的时候,它首先从start_urls()中的第一个链接初步发起呼吁,然后在callback里管理回来的数码。
Items Item类提供格式化的多寡,能够了然为数量Model类。
Selectors
Scrapy的Selector类基于lxml库,提供HTML或XML转变职能。以response对象作为参数生成的Selector实例就可以通超过实际例对象的xpath()方法获得节点的多少。
编写多少个Web爬虫
接下去将上多个Beautiful Soup版的抓取书籍新闻的事例(使用Beautiful
Soup编写叁个爬虫 体系小说汇总)改写成Scrapy版本。
新建项目

scrapy startproject book_project

那行命令会创制二个名称为book_project的项目。
编写Item类 即实体类,代码如下:

import scrapy

class BookItem(scrapy.Item):
    title = scrapy.Field()
    isbn = scrapy.Field()
    price = scrapy.Field()

  编写Spider类 设置那些Spider的名号,允许爬取的域名和从哪些链接最初:

import scrapy
from book_project.items import BookItem

class BookInfoSpider(scrapy.Spider):
    name = "bookinfo"
    allowed_domains = ["allitebooks.com", "amazon.com"]
    start_urls = [
        "http://www.allitebooks.com/security/",
    ]

 

遍历分页数据的方式

def parse(self, response):
    num_pages = int(response.xpath('//a[contains(@title, "Last Page →")]/text()').extract_first())
    base_url = "http://www.allitebooks.com/security/page/{0}/"
    for page in range(1, num_pages):
        yield scrapy.Request(base_url.format(page), dont_filter=True, callback=self.parse_page)

‘//a’的情趣全数的a标签;
‘//a[contains(@title, “Last Page →”)’
的意味是在富有的a标签中,title属性包蕴”Last Page →”的a标签;
extract() 方法深入分析并回到符合条件的节点数据。

从allitebooks.com获取书籍音信格局

def parse_page(self, response):
        for sel in response.xpath('//div/article'):
            book_detail_url = sel.xpath('div/header/h2/a/@href').extract_first()
            yield scrapy.Request(book_detail_url, callback=self.parse_book_info)

def parse_book_info(self, response):
    title = response.css('.single-title').xpath('text()').extract_first()
    isbn = response.xpath('//dd[2]/text()').extract_first()
    item = BookItem()
    item['title'] = title
    item['isbn'] = isbn
    amazon_search_url = 'https://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3Daps&field-keywords=' + isbn
    yield scrapy.Request(amazon_search_url, callback=self.parse_price, meta={ 'item': item })

 

从amazon.com获取书籍价格方式            

def parse_price(self, response):
    item = response.meta['item']
    item['price'] = response.xpath('//span/text()').re(r'\$[0-9]+\.[0-9]{2}?')[0]
    yield item

启航服务初始抓取

scrapy crawl bookinfo -o books.csv

-o books.csv 参数的情致是将抓取的Item集合输出到csv文件。
除了CSV格式,Scrapy还帮助JSON,XML的格式输入。具体请参照他事他说加以考察:
结果:
大家处于大数额时代,对数据管理感兴趣的爱侣招待查看另三个密密麻麻小说: 利用Python进行数量解析基础类别小说汇总

大数额,大额深入分析、BeautifulSoup,Beautiful Soup入门,Scrapy,
Scrapy爬虫,数据发现,数据分析,数据管理,pandas,互连网爬虫,web
scraper,python excel,python写入excel数据,python管理csv文件 Scrapy
csv, python操作Excel,excel读写 Scrapy框架
Scrapy框架入门大数额,大额解析、BeautifulSoup,Beautiful
Soup入门,Scrapy,
Scrapy爬虫,数据发现,数据分析,数据管理,pandas,网络爬虫,web
scraper,python excel,python写入excel数据,python管理csv文件 Scrapy
csv, python操作Excel,excel读写 Scrapy框架 Scrapy框架入门
大额,大额分析、BeautifulSoup,Beautiful Soup入门,Scrapy,
Scrapy爬虫,数据开掘,数据深入分析,数据管理,pandas,互连网爬虫,web
scraper,python excel,python写入excel数据,python处理csv文件 Scrapy
csv, python操作Excel,excel读写 Scrapy框架 Scrapy框架入门
大数据,大数据深入分析、BeautifulSoup,Beautiful Soup入门,Scrapy,
Scrapy爬虫,数据开采,数据剖判,数据处理,pandas,网络爬虫,web
scraper,python excel,python写入excel数据,python管理csv文件 Scrapy
csv, python操作Excel,excel读写 Scrapy框架 Scrapy框架入门
大数据,大数据解析、BeautifulSoup,Beautiful Soup入门,Scrapy,
Scrapy爬虫,数据开掘,数据分析,数据管理,pandas,互联网爬虫,web
scraper,python excel,python写入excel数据,python处理csv文件 Scrapy
csv, python操作Excel,excel读写 Scrapy框架 Scrapy框架入门

上周上学了BeautifulSoup的基础知识并用它做到了叁个互联网爬虫(
使用…

下周读书了BeautifulSoup的基础知识并用它做到了二个互联网爬虫(
使用Beautiful Soup编写贰个爬虫
系列小说汇总
),

通过上一篇小说的管理,大家曾经获得了书的书名和ISBN码。(网络爬虫:
从allitebooks.com抓取书籍新闻并从amazon.com抓取价格(2):
抓取allitebooks.com书籍音信及ISBN码)

BeautifulSoup是二个十一分流行的Python网络抓取库,它提供了一个依照HTML结构的Python对象。


接下来将透过ISBN码去amazon.com获取每本书对应的标价。

虽说轻松易懂,又能丰富好的拍卖HTML数据,可是比较Scrapy来说,BeautifulSoup有三个最大的老毛病:慢。

一、驾驭需求和解析网站

Scrapy 是七个开源的 Python
数据抓取框架,速度快,庞大,並且使用轻便。

透过剖析amazon.com得知,以ISBN码作为搜索关键字可查找到相应的书。

来看二个官方网址主页上的简要并完全的爬虫:

结果页码就有那本书的价钱,既然价格是以$符号开头,那就能够透过正则表明式获得价格。

图片 1

图片 2

虽说独有10行左右的代码,可是它的确是一个安然无恙的爬虫服务:

 

  1. 当施行scrapy runspider xxx.py命令的时候,
    Scrapy在品种里找找Spider(蜘蛛️)并由此爬虫引擎来进行它。
  2. 第一从概念在start_urls里的U阿斯顿·马丁DB11L早先发起呼吁,然后经过parse()方法管理响应。response参数正是回去的响应对象。
  3. 在parse()方法中,通过贰个CSS选择器获取想要抓取的数量。

通过正则表明式匹配价格代码:

Scrapy全体的央浼都是异步的,也正是说Scrapy无需等七个伸手完毕本领管理下一条须要,而是同不日常间提倡另一条乞求。

def get_price_amazon(isbn):
    base_url = "https://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3Daps&field-keywords="
    url = base_url + str(isbn)
    page = urlopen(url)
    soup = BeautifulSoup(page, 'lxml')
    page.close()
    price_regexp = re.compile("\$[0-9]+(\.[0-9]{2})?")
    price = soup.find(text=price_regexp)
    return [isbn, price]

再者,异步需要的另八个收益是当某些诉求退步了,别的的呼吁不会境遇震慑。

 

安装(Mac)

上一篇随笔中早就赢得了具有图书的ISBN码,遍历全体的ISBN码传入get_price_amazon()方法就能够获取具备图书的价位,运维结果:

pip install scrapy

图片 3

任何操作系统请参见完整安装指导:http://doc.scrapy.org/en/latest/intro/install.html

二、将两有个别结实数据统一

Scrapy中多少个须要领悟的定义

前两日刚学过数码管理(运用Python实行数据解析基础类别小说汇总),为了练练手,这里通过pandas将两片段数据统一起来:

Spiders

book_info_data = pd.read_csv('books.csv')
price_data = pd.read_csv('prices.csv')
result = pd.merge(book_info_data, price_data, on='isbn')
result.to_csv('result.csv', index=False, header=True, columns=['isbn', 'title', 'price'])

Spider类想要表达的是:怎么着抓取四个规定了的网址的数量。譬如在start_urls里定义的去哪个链接抓取,parse()方法中定义的要抓取什么样的多寡。

 

当二个Spider起首举行的时候,它首先从start_urls()中的第叁个链接初阶发起呼吁,然后在callback里管理回来的多寡。

result.csv文件结果:

Items

图片 4

Item类提供格式化的数码,能够领略为数量Model类。

 

Selectors

完全代码请移步github:https://github.com/backslash112/book\_scraper\_python

Scrapy的Selector类基于lxml库,提供HTML或XML转变职能。以response对象作为参数生成的Selector实例就能够通超过实际例对象的xpath()方法拿到节点的多少。

Beautiful Soup基础知识:网络爬虫:
从allitebooks.com抓取书籍音信并从amazon.com抓取价格(1):
基础知识Beautiful
Soup

编写三个Web爬虫

咱俩处于大数量时期,对数码管理感兴趣的爱侣招待查看另贰个多元小说:运用Python实行数据解析基础类别随笔汇总

接下去将上多少个Beautiful Soup版的抓取书籍消息的事例(利用Beautiful Soup编写二个爬虫
类别随笔汇总)改写成Scrapy版本。

 

新建项目

接下去图谋攻读Scrapy库,Scrapy是叁个征集工具,它能够帮您大幅度下降网页寻找和识别专门的学业,轻便搜罗一个或多少个域名的新闻。风乐趣的心上人款待关怀本博客,也接待我们留言实行座谈。

scrapy startproject book_project

大额,大额解析、BeautifulSoup,Beautiful
Soup入门,数据发掘,数据深入分析,数据处理,pandas,互连网爬虫,web
scraper,python excel,python写入excel数据,python管理csv文件
python操作Excel,excel读写
通过上一篇随笔的拍卖,我们早就得到了书的书名和ISBN码。(互连网爬虫:
从allitebooks.com抓取书籍消息并从amazon.com抓取价格(2):
抓取allitebooks.com书籍音信及ISBN码)
接下来将经过ISBN码去amazon.com获取每本书对应的标价。
一、领悟须要和剖判网址通过解析amazon.com得知,以ISBN码作为找出关键字可查找到呼应的书。
结果页码就有那本书的价钱,既然价格是以$符号起首,那就能够透过正则表明式拿到价格。通过上一篇小说的处理,我们已经获得了书的书名和ISBN码。(网络爬虫:
从allitebooks.com抓取书籍音讯并从amazon.com抓取价格(2):
抓取allitebooks.com书籍音信及ISBN码)
接下来将透过ISBN码去amazon.com获取每本书对应的价位。
一、通晓须求和剖析网址通过深入分析amazon.com得知,以ISBN码作为搜索关键字可查找到相应的书。
结果页码就有那本书的标价,既然价格是以$符号开端,那就足以因此正则表达式获得价格。通过上一篇随笔的拍卖,大家已经得到了书的书名和ISBN码。(网络爬虫:
从allitebooks.com抓取书籍新闻并从amazon.com抓取价格(2):
抓取allitebooks.com书籍消息及ISBN码)
接下来将因而ISBN码去amazon.com获取每本书对应的价格。
一、驾驭供给和解析网址通过深入分析amazon.com得知,以ISBN码作为找出关键字可查找到呼应的书。
结果页码就有那本书的价位,既然价格是以$符号开首,那就能够通过正则表达式获得价格。通过上一篇小说的管理,大家曾经获得了书的书名和ISBN码。(互连网爬虫:
从allitebooks.com抓取书籍音信并从amazon.com抓取价格(2):
抓取allitebooks.com书籍新闻及ISBN码)
接下来将通过ISBN码去amazon.com获取每本书对应的价钱。
一、理解必要和解析网站通过解析amazon.com得知,以ISBN码作为寻找关键字可查找到相应的书。
结果页码就有这本书的价格,既然价格是以$符号开首,那就足以经过正则表明式获得价格。通过上一篇随笔的拍卖,大家早就得到了书的书名和ISBN码。(互联网爬虫:
从allitebooks.com抓取书籍音信并从amazon.com抓取价格(2):
抓取allitebooks.com书籍消息及ISBN码)
接下来将经过ISBN码去amazon.com获取每本书对应的标价。
一、领悟须要和解析网址通过深入分析amazon.com得知,以ISBN码作为寻觅关键字可查找到呼应的书。
结果页码就有那本书的价钱,既然价格是以$符号初步,那就足以透过正则表明式得到价格。通过上一篇随笔的管理,我们早已获得了书的书名和ISBN码。(互连网爬虫:
从allitebooks.com抓取书籍消息并从amazon.com抓取价格(2):
抓取allitebooks.com书籍音信及ISBN码)
接下来将透过ISBN码去amazon.com获取每本书对应的标价。
一、驾驭供给和深入分析网址通过深入分析amazon.com得知,以ISBN码作为找寻关键字可查找到呼应的书。
结果页码就有那本书的价钱,既然价格是以$符号初阶,那就可以透过正则表明式获得价格。

那行命令会创制贰个名字为book_project的项目。

编写Item类

即实体类,代码如下:

import scrapy

class BookItem(scrapy.Item):
    title = scrapy.Field()
    isbn = scrapy.Field()
    price = scrapy.Field()

 

编写Spider类

安装这几个Spider的称号,允许爬取的域名和从哪些链接开始:

import scrapy
from book_project.items import BookItem

class BookInfoSpider(scrapy.Spider):
    name = "bookinfo"
    allowed_domains = ["allitebooks.com", "amazon.com"]
    start_urls = [
        "http://www.allitebooks.com/security/",
    ]

 

遍历分页数据的法子

def parse(self, response):
    num_pages = int(response.xpath('//a[contains(@title, "Last Page →")]/text()').extract_first())
    base_url = "http://www.allitebooks.com/security/page/{0}/"
    for page in range(1, num_pages):
        yield scrapy.Request(base_url.format(page), dont_filter=True, callback=self.parse_page)

‘//a’的情趣全体的a标签;
‘//a[contains(@title, “Last Page →”)’
的意思是在具有的a标签中,title属性富含”Last Page →”的a标签;
extract() 方法剖判并重回符合条件的节点数据。

从allitebooks.com获取书籍音信方法

def parse_page(self, response):
        for sel in response.xpath('//div/article'):
            book_detail_url = sel.xpath('div/header/h2/a/@href').extract_first()
            yield scrapy.Request(book_detail_url, callback=self.parse_book_info)

def parse_book_info(self, response):
    title = response.css('.single-title').xpath('text()').extract_first()
    isbn = response.xpath('//dd[2]/text()').extract_first()
    item = BookItem()
    item['title'] = title
    item['isbn'] = isbn
    amazon_search_url = 'https://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3Daps&field-keywords=' + isbn
    yield scrapy.Request(amazon_search_url, callback=self.parse_price, meta={ 'item': item })

 

从amazon.com获取书籍价格措施            

def parse_price(self, response):
    item = response.meta['item']
    item['price'] = response.xpath('//span/text()').re(r'\$[0-9]+\.[0-9]{2}?')[0]
    yield item

起头服务起先抓取

scrapy crawl bookinfo -o books.csv

-o books.csv
参数的情趣是将抓取的Item集合输出到csv文件。

除却CSV格式,Scrapy还协理JSON,XML的格式输入。具体请参照他事他说加以考察:

结果:

图片 5

 

 

完全代码请移步GitHub: https://github.com/backslash112/book\_scraper\_scrapy

大家处于大数目时期,对数据管理感兴趣的意中人接待查看另多个多级小说: 应用Python实行数量深入分析基础种类随笔汇总

大额,大额分析、BeautifulSoup,Beautiful Soup入门,Scrapy,
Scrapy爬虫,数据开采,数据分析,数据管理,pandas,互连网爬虫,web
scraper,python excel,python写入excel数据,python管理csv文件 Scrapy
csv, python操作Excel,excel读写 Scrapy框架
Scrapy框架入门大额,大额深入分析、BeautifulSoup,Beautiful
Soup入门,Scrapy,
Scrapy爬虫,数据开掘,数据分析,数据管理,pandas,互联网爬虫,web
scraper,python excel,python写入excel数据,python管理csv文件 Scrapy
csv, python操作Excel,excel读写 Scrapy框架 Scrapy框架入门
大数据,大数据剖判、BeautifulSoup,Beautiful Soup入门,Scrapy,
Scrapy爬虫,数据开采,数据深入分析,数据管理,pandas,网络爬虫,web
scraper,python excel,python写入excel数据,python处理csv文件 Scrapy
csv, python操作Excel,excel读写 Scrapy框架 Scrapy框架入门
大数据,大数据分析、BeautifulSoup,Beautiful Soup入门,Scrapy,
Scrapy爬虫,数据开采,数据解析,数据管理,pandas,网络爬虫,web
scraper,python excel,python写入excel数据,python管理csv文件 Scrapy
csv, python操作Excel,excel读写 Scrapy框架 Scrapy框架入门
大数据,大数量分析、BeautifulSoup,Beautiful Soup入门,Scrapy,
Scrapy爬虫,数据开采,数据剖析,数据管理,pandas,网络爬虫,web
scraper,python excel,python写入excel数据,python管理csv文件 Scrapy
csv, python操作Excel,excel读写 Scrapy框架 Scrapy框架入门

相关文章