scrapy 入门
2017-11-07 14:24
302 查看
github链接:https://github.com/GeraltLin/douban_book
一个Scrapy项目主要分为如下几个步骤:
1. 创建一个Scrapy项目
2. 定义提取的Item
3. 编写爬取网站的 spider 并提取 Item
4. 编写 Item Pipeline 来存储以及处理提取到的Item(即数据)
创建Scrapy项目:
在存储目录中,在cmd命令行中敲入scrapy startproject doubanbook
就创建了名为tutorial的项目,其结构如下:
doubanbook/
scrapy.cfg
doubanbook/
__init__.py
items.py
pipelines.py
settings.py
spiders/
__init__.py
...
pycharm下使用注意事项:
需要在doubanbook/doubanbook,将外层doubanbook目录右键mark dirctory as sources root
Item :
是保存爬取到的数据的容器,任何定义的item都需要继承scrapy.item,
在item中定义相应的字段,如name,ratings等需要爬取的信息
pipelines:
当Item在Spider中被收集之后,它将会被传递到Item Pipeline,一些组件会按照一定的顺序执行对Item的处理。
每个item pipeline组件(有时称之为“Item Pipeline”)是实现了简单方法的Python类。他们接收到Item并通过它执行一些行为,同时也决定此Item是否继续通过pipeline,或是被丢弃而不再进行处理。
以下是item pipeline的一些典型应用:
1.清理HTML数据
2.验证爬取的数据(检查item包含某些字段)
3.查重(并丢弃)
4.将爬取结果保存到数据库中
Spider是用户编写用于从单个网站(或者一些网站)爬取数据的类。在spider文件夹中创建
其包含了一个用于下载的初始URL,如何跟进网页中的链接以及如何分析页面中的内容, 提取生成 item 的方法。
需要定义name(爬虫名字),allowed_domains(允许爬取的范围),start_urls(第一个爬取的页面)
需要定义的方法parse, 被调用时,每个初始URL完成下载后生成的 Response 对象将会作为唯一的参数传递给该函数。 该方法负责解析返回的数据(response data),提取数据(生成item)以及生成需要进一步处理的URL的 Request 对象。
Scrapy设定(settings)提供了定制Scrapy组件的方法。您可以控制包括核心(core),插件(extension),pipeline及spider组件。
对于这个例子,由于豆瓣存在反爬虫机制,所以需要在settings 生成一个user_agent添加如下信息:
执行爬虫项目:
在doubanbook/doubanbook目录下,cmd敲入 scrapy crawl douban-book -o book.csv
以csv保存结果
一个Scrapy项目主要分为如下几个步骤:
1. 创建一个Scrapy项目
2. 定义提取的Item
3. 编写爬取网站的 spider 并提取 Item
4. 编写 Item Pipeline 来存储以及处理提取到的Item(即数据)
创建Scrapy项目:
在存储目录中,在cmd命令行中敲入scrapy startproject doubanbook
就创建了名为tutorial的项目,其结构如下:
doubanbook/
scrapy.cfg
doubanbook/
__init__.py
items.py
pipelines.py
settings.py
spiders/
__init__.py
...
pycharm下使用注意事项:
需要在doubanbook/doubanbook,将外层doubanbook目录右键mark dirctory as sources root
Item :
是保存爬取到的数据的容器,任何定义的item都需要继承scrapy.item,
在item中定义相应的字段,如name,ratings等需要爬取的信息
class DoubanBookItem(scrapy.Item): name = scrapy.Field() # 书名 price = scrapy.Field() # 价格 edition_year = scrapy.Field() # 出版年份 publisher = scrapy.Field() # 出版社 ratings = scrapy.Field() # 评分 author = scrapy.Field() # 作者 content = scrapy.Field()
pipelines:
当Item在Spider中被收集之后,它将会被传递到Item Pipeline,一些组件会按照一定的顺序执行对Item的处理。
每个item pipeline组件(有时称之为“Item Pipeline”)是实现了简单方法的Python类。他们接收到Item并通过它执行一些行为,同时也决定此Item是否继续通过pipeline,或是被丢弃而不再进行处理。
以下是item pipeline的一些典型应用:
1.清理HTML数据
2.验证爬取的数据(检查item包含某些字段)
3.查重(并丢弃)
4.将爬取结果保存到数据库中
#对content内容进行处理
class DoubanBookPipeline(object): def process_item(self, item, spider): info = item['content'].split(' / ') # [法] 圣埃克苏佩里 / 马振聘 / 人民文学出版社 / 2003-8 / 22.00元 item['name'] = item['name'] item['price'] = info[-1] item['edition_year'] = info[-2] item['publisher'] = info[-3] return itemSpider:
Spider是用户编写用于从单个网站(或者一些网站)爬取数据的类。在spider文件夹中创建
其包含了一个用于下载的初始URL,如何跟进网页中的链接以及如何分析页面中的内容, 提取生成 item 的方法。
需要定义name(爬虫名字),allowed_domains(允许爬取的范围),start_urls(第一个爬取的页面)
需要定义的方法parse, 被调用时,每个初始URL完成下载后生成的 Response 对象将会作为唯一的参数传递给该函数。 该方法负责解析返回的数据(response data),提取数据(生成item)以及生成需要进一步处理的URL的 Request 对象。
from douban.items import DoubanBookItem class BookSpider(scrapy.Spider): name = 'douban-book' allowed_domains = ['douban.com'] start_urls = [ 'https://book.douban.com/top250' ] def parse(self, response): # 请求第一页 yield scrapy.Request(response.url, callback=self.parse_next)#对第一个初始页面爬取内容,使用回调函数执行parse_next # 请求其它页 for page in response.xpath('//div[@class="paginator"]/a'): link = page.xpath('@href').extract()[0]#获取链接 yield scrapy.Request(link, callback=self.parse_next)#去其他页面执行同样的操作 def parse_next(self, response): for item in response.xpath('//tr[@class="item"]'): book = DoubanBookItem() book['name'] = item.xpath('td[2]/div[1]/a/@title').extract()[0] book['content'] = item.xpath('td[2]/p/text()').extract()[0] book['ratings'] = item.xpath('td[2]/div[2]/span[2]/text()').extract()[0] yield bookSettings:
Scrapy设定(settings)提供了定制Scrapy组件的方法。您可以控制包括核心(core),插件(extension),pipeline及spider组件。
对于这个例子,由于豆瓣存在反爬虫机制,所以需要在settings 生成一个user_agent添加如下信息:
from faker import Factory f = Factory.create() USER_AGENT = f.user_agent()
执行爬虫项目:
在doubanbook/doubanbook目录下,cmd敲入 scrapy crawl douban-book -o book.csv
以csv保存结果
相关文章推荐
- scrapy入门
- [Python]网络爬虫(12):爬虫框架Scrapy的第一个爬虫示例入门教程
- scrapy入门学习笔记之爬取豆瓣9分榜单
- python scrapy 抓取脚本之家文章(scrapy 入门使用简介)
- scrapy 爬虫入门(1)
- scrapy入门精简
- scrapy爬虫框架入门实例(一)
- Scrapy入门教程
- Python爬虫框架Scrapy教程(1)—入门
- Scrapy 入门学习笔记(1) -- Scrapy 项目搭建与架构介绍
- [Python]网络爬虫(12):爬虫框架Scrapy的第一个爬虫示例入门教程
- Scrapy爬虫入门教程二 官方提供Demo
- 爬虫学习(三) Scrapy框架入门与豆瓣电影爬虫
- python3 [爬虫入门实战]爬虫之scrapy爬取织梦者网站并存mongoDB
- [Python]网络爬虫(12):爬虫框架Scrapy的第一个爬虫示例入门教程
- Python爬虫框架Scrapy入门
- scrapy爬虫框架入门实例
- 运维学python之爬虫高级篇(一)Scrapy框架入门
- Scrapy入门--Scrapy是什么
- python——爬虫学习——Scrapy爬虫框架入门-(6)