欢迎访问宙启技术站
智能推送

Scrapy框架怎么在python中使用

发布时间:2023-05-16 10:42:20

Scrapy框架是一个为了帮助开发人员爬取Web站点数据而设计的工具集。Scrapy框架提供了一套简单但是强大的API,允许我们以高效的方式构建一个Web爬虫,该框架可以自动发现从目标Web站点中获得的有趣信息,并将其保存到我们的数据库或分别为一种输出格式。

Scrapy框架的安装

1. Scrapy框架的安装可以使用pip命令,我们首先要做的是在命令行中键入如下命令:

pip install scrapy

2. 在安装了Scrapy之后,我们可以通过如下命令查看已安装的Scrapy版本:

scrapy version

3. Scrapy框架需要的技术基础:HTML,CSS以及一种高级编程语言Python。

Scrapy框架的实例

下面我们将演示如何使用Scrapy框架来爬取http://books.toscrape.com/ 上的数据。

1. 初始化项目

我们将使用命令scrapy startproject命令创建一个新项目placeholderbooks:

scrapy startproject placeholderbooks

2. 创建Spider

我们将使用命令cd命令切换到新创建的项目目录并创建Spider:

cd placeholderbooks

scrapy genspider books1 books.toscrape.com

3. 编写解析规则

接下来,我们将使用如下解析规则提取获取到的数据:

import scrapy
from ..items import PlaceholderbooksItem

class Books1Spider(scrapy.Spider):
     name = 'books1'
     allowed_domains = ['books.toscrape.com']
     start_urls = ['http://books.toscrape.com/']
     def parse(self, response):
         items = PlaceholderbooksItem()
         for book in response.css('article.product_pod'):
             title = book.xpath('./h3/a/@title').extract_first()
             price = book.css('p.price_color::text').extract_first()
             rating = book.css('p.star-rating::attr(class)').extract_first()
             rating = rating.replace('star-rating', '').strip()
             items['title'] = title
             items['price'] = price
             items['rating'] = rating
             yield items

在这个代码中,使用了XPath和CSS选择器来定位和提取HTML页面中的数据,并将其存储在一个Python字典中。在键入yield之后,我们可以通过scrapy shell 命令打开交互式shell,以进行数据测试和调试。

4. 存储数据

我们将结果存储在SQLite数据库中。根据要求,我们应该为每个电子书创建一个表项:

import sqlite3
con = sqlite3.connect('books.db')
cur = con.cursor()
def db_table():
    cur.execute('CREATE TABLE IF NOT EXISTS books(title TEXT, price REAL, rating INTEGER)')
    con.commit()

def book_items(title, price, rating):
    cur.execute('INSERT INTO books(title, price, rating) VALUES(?,?,?)',(title, price, rating))
    con.commit()

调用上述函数来保存数据:

import sqlite3
con = sqlite3.connect('books.db')
cur = con.cursor()
def db_table():
    cur.execute('CREATE TABLE IF NOT EXISTS books(title TEXT, price REAL, rating INTEGER)')
    con.commit()

def book_items(title, price, rating):
    cur.execute('INSERT INTO books(title, price, rating) VALUES(?,?,?)',(title, price, rating))
    con.commit()

class Books1Spider(scrapy.Spider):
    name = 'books1'
    allowed_domains = ['books.toscrape.com']
    start_urls = ['http://books.toscrape.com/']
    def parse(self, response):
        db_table()
        for book in response.css('article.product_pod'):
            title = book.xpath('./h3/a/@title').extract_first()
            price = book.css('p.price_color::text').extract_first()
            rating = book.css('p.star-rating::attr(class)').extract_first()
            rating = rating.replace('star-rating', '').strip()
            book_items(title, price, rating)

5. 保存输出

最后,我们将数据将输出到CSV文件中。我们可以使用如下命令来运行这个程序:

scrapy crawl books1 -o books.csv

这将使用Scrapy的内置输出器将结果输出到一个名为books.csv的文件中。

以上就是使用Scrapy框架在Python中爬取网页数据并进行存储和输出的基本步骤。在实际的开发过程中,我们可以根据具体的数据获取需求,自由地修改和完善代码。