Scrapy框架怎么在python中使用
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中爬取网页数据并进行存储和输出的基本步骤。在实际的开发过程中,我们可以根据具体的数据获取需求,自由地修改和完善代码。
