Python爬虫框架Scrapy基本用法入门教程
Scrapy简介
Scrapy是Python的一个开源框架,用于爬取Web站点并从页面中提取结构化数据。Scrapy可以用于数据挖掘、信息处理或存储等不同领域的任务。
Scrapy是基于Twisted框架编写的,因此是异步的。它提供了一系列的便捷功能,包括管道、数据存储和异常处理等。
安装Scrapy
安装Scrapy之前,请先确保已安装好Python和pip。
使用pip安装Scrapy:
pip install scrapy
创建Scrapy项目
创建一个新的Scrapy项目:
scrapy startproject myproject
命令执行后,会创建一个名为myproject的文件夹,该文件夹包含以下文件:
- scrapy.cfg:一个主要的配置文件
- items.py:定义数据结构
- middlewares.py:定义中间件
- pipelines.py:定义数据管道
- settings.py:定义配置项
- spiders/:一个包含爬虫代码的文件夹
创建Spider
Spider是Scrapy的最重要的组件,它定义如何爬取和解析Web站点的页面。
在spiders目录下创建一个新的Spider:
cd myproject
scrapy genspider example example.com
这会在spiders目录下生成一个新的名为example的文件。通常,文件中已经有一些注释和结构化的代码,可以更改和扩展以满足需求。
运行Spider
要运行Spider,请使用scrapy crawl
命令,后跟Spider的名称:
scrapy crawl example
在Spider成功执行之后,你将会看到它输出的结果列表。
示例1:爬取豆瓣电影Top250的电影名
我们可以使用Scrapy爬取豆瓣电影Top250的电影名。
在items.py中定义一个新的Item类:
import scrapy
class Movie(scrapy.Item):
title = scrapy.Field()
rating = scrapy.Field()
在example.py中更新代码如下:
import scrapy
from myproject.items import Movie
class ExampleSpider(scrapy.Spider):
name = "example"
allowed_domains = ["douban.com"]
start_urls = [
"https://movie.douban.com/top250"
]
def parse(self, response):
for sel in response.xpath('//ol[@class="grid_view"]/li'):
item = Movie()
item['title'] = sel.xpath('div[@class="item"]/div[@class="info"]/div[@class="hd"]/a/span[@class="title"]/text()').extract_first()
item['rating'] = sel.xpath('div[@class="item"]/div[@class="info"]/div[@class="bd"]/div[@class="star"]/span[@class="rating_num"]/text()').extract_first()
yield item
现在,可以使用scrapy crawl example -o movies.json
将结果输出到movies.json文件中。执行成功后,movies.json文件将包含所有电影的标题和评分。
示例2:爬取新浪新闻的新闻标题
我们可以使用Scrapy爬取新浪新闻的新闻标题。
在items.py中创建一个新的Item类:
import scrapy
class News(scrapy.Item):
title = scrapy.Field()
在example.py中更新代码如下:
import scrapy
from myproject.items import News
class ExampleSpider(scrapy.Spider):
name = "example"
allowed_domains = ["sina.com.cn"]
start_urls = [
"https://news.sina.com.cn/",
]
def parse(self, response):
for sel in response.xpath('//div[@class="feed-card-content"]/h2[@class="card-title"]/a'):
item = News()
item['title'] = sel.xpath('text()').extract_first()
yield item
现在,可以使用scrapy crawl example -o news.json
将结果输出到news.json文件中。执行成功后,news.json文件将包含所有新闻标题。
总结
本教程仅介绍了Scrapy的部分基础知识和用法。如果想要深入了解Scrapy的其他用法和功能,可以参考Scrapy的官方文档和其他教程。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python爬虫框架Scrapy基本用法入门教程 - Python技术站