python爬虫scrapy框架有什么用
更新时间:2023-11-15什么是Scrapy框架
Scrapy是一个Python爬虫框架,可用于抓取和提取Web中的数据。 Scrapy提供了一组用于抓取Web内容的库和工具箱,包括用于处理HTML及Json的解析器和中间件,同时还提供了可以接受异步处理和多线程的机制。
import scrapy class MySpider(scrapy.Spider): name = 'myspider' start_urls = ['http://www.example.com'] def parse(self, response): pass
Scrapy的主要功能
Scrapy的核心功能包括以下几点:
- 提供HTTP请求和自动化处理的过程。
- 能够从URL中提取数据。
- 可以提取HTML和XML数据,并将其存储在所需的数据库中。
- 可以在不同的页面之间跟踪和维护这些数据。
import scrapy class MySpider(scrapy.Spider): name = "quotes" start_urls = [ 'http://quotes.toscrape.com/page/1/', ] def parse(self, response): for quote in response.css('div.quote'): yield { 'text': quote.css('span.text::text').get(), 'author': quote.css('span small::text').get(), 'tags': quote.css('div.tags a.tag::text').getall(), } next_page = response.css('li.next a::attr(href)').get() if next_page is not None: yield response.follow(next_page, self.parse)
Scrapy的优点
Scrapy作为一个高级爬虫框架,有以下优点:
- 组件化和可扩展性。
- 提供了有用的异常处理功能。
- 具有自动性。
- 提供针对许多目标网站的预建组件。
- 可轻松创建自己的自定义组件。
- 可在不同的网站之间切换。
#引入自定义pipepline ITEM_PIPELINES = { 'scrapy_example.pipelines.AddItemPipeline': 300, } # Item Pipeline示例 import pymongo class AddItemPipeline(object): def __init__(self): connection = pymongo.MongoClient( 'localhost', 27017 ) db = connection['crawler'] self.collection = db['items'] def process_item(self, item, spider): self.collection.insert(dict(item)) return item
Scrapy的缺点
Scrapy框架的一些缺点和限制:
- Scrapy框架目前仅支持Python 2.x和Python 3.x,无法支持其他不同的语言。
- 缺乏易于阅读的文档和背景资料。
- 无法支持动态页面上的网页抓取。
- 数据处理和分析缺乏扩展性。
#导入Dynamic website scraping示例 from scrapy_splash import SplashRequest class QuotesSpider(scrapy.Spider): name = 'quotesjs' start_urls = [ 'http://quotes.toscrape.com/js/', ] def start_requests(self): for url in self.start_urls: yield SplashRequest(url, self.parse, endpoint='render.html', args={'wait': 0.5}, ) def parse(self, response): for quote in response.css('div.quote'): yield { 'text': quote.css('span.text::text').get(), 'author': quote.css('span small::text').get(), 'tags': quote.css('div.tags a.tag::text').getall(), }