parsel-流畅轻松的网页爬虫:Parsel 介绍
Parsel是一个基于XPath和CSS选择器的流畅轻松的网页爬虫框架。它是Scrapy流程中的一个单独的库,能够让你在少量代码的情况下即可提取所需的数据。
它的实现方式是通过对HTML或XML文档进行选择器的选取或过滤,并将符合条件的文档内容提取出来。XPath和CSS selectors是工作中用得最多的两种语言,而Parsel允许你可以用它们两个来爬取数据。
对开发者来说,使用Parsel可以带来很多好处。第一,Parsel提供了对编写HTML解析器的高度抽象,使得开发者不用太关注解析器的实现细节。第二,由于Parsel使用XPath和CSS选择器方式,这意味着它已经内置了常用语言的操作函数(如contains和starts-with等)和具有```if/else```逻辑的判断语句,这就减少了大量时间和代码。
下面,我将详细介绍如何使用Parsel来进行数据爬取。
一、安装和配置Parsel
要使用Parsel,首先需要需要安装它。使用pip命令即可完成:
pip install parsel
安装完成后,你需要在Scrapy应用程序中使用它。在```settings.py```中添加如下行:
DOWNLOADER_MIDDLEWARES = {
……
'scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware': 100,
'scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware': 300,
'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware': 350,
'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware': 400,
'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None,
'scrapy_user_agents.middlewares.RandomUserAgentMiddleware': 543,
'scrapy_fake_useragent.middleware.RandomUserAgentMiddleware': 544,
'scrapy.downloadermiddlewares.retry.RetryMiddleware': None,
'scrapy_fake_useragent.middleware.RetryWithFakeUserAgentMiddleware': 550,
'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware': None,
'scrapy.downloadermiddlewares.redirect.RedirectMiddleware': 600,
'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
'scrapy.downloadermiddlewares.redirect.RedirectMiddleware': None,
'scrapy_fake_useragent.middleware.RedirectWithFakeUserAgentMiddleware': 850,
'scrapy.downloadermiddlewares.cookies.CookiesMiddleware': 700,
'scrapy.downloadermiddlewares.chunked.ChunkedTransferMiddleware': 830,
'scrapy.downloadermiddlewares.stats.DownloaderStats': 850,
'scrapy.downloadermiddlewares.httpcache.HttpCacheMiddleware': 900,
……
}
ITEM_PIPELINES = {
'cdmItemPipeline.CdmitempipelinePipeline': 300,
'scrapy.pipelines.images.ImagesPipeline':1,
'scrapy.pipelines.files.FilesPipeline':2,
'cdmMysqlPipline.CdmmysqlpiplinePipeline':500
}
IMAGES_STORE = './images'
FILES_STORE = './files'
现在你已经完成了Parsel的安装和配置,在接下来的步骤中会涉及到Parsel模块,以验证我们是否有必要使用它。
二、使用Parsel解析数据
假设我们需要从一个模板网页中提取电影信息和评论。我们需要使用Parsel入门语法,来完成相关数据的提取。在知道了如何读取页面后,我们将会提取需要的那些信息。
这里,我贴出了一个明星列表的模板页面(只是例子),假设此页面包含电影名字、评分、评论等信息:
<html>
<body>
<div class="movie-list">
<div class="movie">
<h2>The Shawshank Redemption</h2>
<p class="rating">9.3</p>
<p class="comment">This is the best movie I've ever seen.</p>
</div>
<div class="movie">
<h2>The Godfather</h2>
<p class="rating">9.2</p>
<p class="comment">Spectacular story and acting.</p>
</div>
<div class="movie">
<h2>The Dark Knight</h2>
<p class="rating">9.0</p>
<p class="comment">The best Batman movie ever.</p>
</div>
</div>
</body>
</html>
实现步骤如下:
1. 创建Scrapy应用程序
我们先创建一个Scrapy项目,以便从页面中获取数据。在终端中,使用以下命令创建一个新的Scrapy项目:
scrapy startproject mymovies
这将创建一个名为mymovies的项目文件夹和Scrapy项目文件结构。
2. 创建模板网页
将上面的列表模板代码复制到一个新的HTML文件中:```path/to/movies.html```
#3.创建Spider
我们需要创建一个名为MoviesSpider的Spider,用于从文件中读取电影数据。此Spider必须继承自Scrapy.Spider类,并定义parse方法来解析网页内容。
我们先打开spiders文件夹并创建一个名为mymovies_spider.py的新文件:
import scrapy
class MoviesSpider(scrapy.Spider):
name = "mymovies"
start_urls = [
"file:///path/to/movies.html"
]
def parse(self, response):
pass
首先,我们命名我们的Spider为mymovies,这样Scrapy就会由该类创建我们的Spider。我们还在start_urls中指定从哪里开始爬取。我们的RobotFileMiddleware和HttpAuthMiddleware也会使用start_urls,以获取相应的robots.txt文件和身份验证文件。这样Scrapy就会将HTML文件从本地文件系统中读取出来,并将内容提供给parse()方法。
4. 编写XPath和CSS选择器并提取数据
我们现在需要再Spider的parse()方法中提取我们需要的数据。对于提取数据,我们将使用组合XPath和CSS选择器方法。
重要提示:本文档假设你已经熟悉了XPath和CSS选择器。如果你只熟悉其中的一个,请先参阅XPath和CSS选择器的教程。
首先,我们将添加以下代码行,将HTML元素存储在变量中:
def parse(self, response):
movies = response.xpath('//div[@class="movie"]')
for movie in movies:
name = movie.xpath('.//h2/text()').extract_first()
rating = movie.css('p.rating::text').extract_first()
comment = movie.css('p.comment::text').extract_first()
这里,我们在```parse()```方法中获取任何包含```class="movie"```的 div。然后我们遍历每个电影元素。我们获取name属性的值,其XPath为```.//h2/text()```,之后我们使用```extract_first()```方法从结果的列表中提取第一个值。在这个例子中,它将提供电影的标题。我们还将获取电影的评分和评论,在此使用了CSS选择器的方案提取。
完整的Spider:
import scrapy
class MoviesSpider(scrapy.Spider):
name = "mymovies"
start_urls = [
"file:///path/to/movies.html"
]
def parse(self, response):
movies = response.xpath('//div[@class="movie"]')
for movie in movies:
name = movie.xpath('.//h2/text()').extract_first()
rating = movie.css('p.rating::text').extract_first()
comment = movie.css('p.comment::text').extract_first()
# Print Item
print()
print("MOVIE: ", name)
print("RATING: ", rating)
print("COMMENT: ", comment)
print("===" * 10)
5. 执行Spider并输出结果
为了运行我们刚刚编写的spider,请在项目目录中打开终端,并运行以下命令:
scrapy crawl mymovies
该命令运行我们的Spider并提取相关数据。结果应该与以下内容相似:
MOVIE: The Shawshank Redemption
RATING: 9.3
COMMENT: This is the best movie I've ever seen.
==============================
MOVIE: The Godfather
RATING: 9.2
COMMENT: Spectacular story and acting.
==============================
MOVIE: The Dark Knight
RATING: 9.0
COMMENT: The best Batman movie ever.
==============================
现在我们的爬虫已经完成。我们成功地使用Parsel库爬取了HTML页面中的数据。
三、总结
Parsel是一个优秀的工具,可以帮助开发者轻松地从HTML或XML文档中提取数据。使用Parsel,您可以轻松地编写XPath和CSS选择器语句,并将它们组合在一起,以快速提取数据。Parsel的代码清晰易懂,使用简便,因此得到了广大开发者的倚重和喜爱。如果您还没有使用过Parsel,现在是时候尝试一下了!
相关文章
- ag真人正式版app电梯要求加班引发热议,员工被迫加班的电梯安全要求引发关注
- mda是什么-Molecular Diagnostic Analyzer 掌握生物信息
- b片在线看观看非常的方便快捷,在线观看B级电影非常便利
- sqlyog-SQLyog:多功能数据库管理利器
- qq语音输入-声音穿越时空,远程影音畅享—QQ语音
- 77直播美女直播app下载人问津网友你不知,热门直播平台推荐:77直播美女主播大全
- lol八强,八强出列!季后赛必看战局
- 51直播经典版V10手机版下载入口可以随意播放观看,轻松观看直播?来下载经典版V10手机版!
- moon下载,Reach for the Moon Discover Limitless Downloads
- 中文剧情在线播放推荐所有视频都可以,1. 《根据剧情在线观看的新视频推荐》(49个字符)2. 《适合在线观看的剧情内容视频推荐》(49个字符)3. 《精彩剧情在线播放的视频推荐》(41个字符)4. 《优秀剧情内容的在线视频推荐》(47个字符)5. 《推荐观看的精彩剧情视频》(35个字符)