免费获取学习方案
ARTICLE DETAIL

资讯详情

深耕编程基础知识与建站技术分享的一线实战洞察。

【Scrapy】Scrapy教程6——提取数据

【Scrapy】Scrapy教程6——提取数据 前一小节我们拿到了页面的数据,那页面中那么多内容,我们想要其中的部分内容,该如何获取呢?这就需要对我们下载到的数据进行解析,提取出来想要的数据,这节就讲讲如何提取数据。引入我们编辑保存下来的shouye.html文件看下,发现这是什么鬼,全是如下图的代码。没错,html文件就是由一堆代码组成的,然后由浏览器进行渲染展示,那我们直接在浏览器中打开html文件是不是就可以了呢,来看看浏览器打开什么样。感觉比纯代码好多了,但是我们再看看实际的网站页面什么样呢?发现正式的网站漂亮很多,布局也很好,那这种效果怎么来的呢?学过web开发的朋友肯定知道,浏览器渲染网页时,不仅有html文件,还有CSS和JavaScript文件,来共同渲染出页面。CSS用来设定网页显示的效果,包括布局、样式、颜色等等,JavaScript用来实现网页的动画或特效,做爬虫我们要知道,我们默认爬取下来的只有html文件,不包括CSS和JS文件,但需要知道有这两个文件,因为有些网站不是静态的,数据是实时从数据库中拿的,而这些数据是通过JS来获取的,爬虫学深了后,就会知道如何从JS中拿数据了,后面有机会单独讲解这一块。网站开发不在本教程的范围内,因此这里只提及,不会深度讲究,有需要系统学习的,可自己寻找相关文章或课程了解。在哪提取数据接着看如何提取数据,访问网站,我们能看到有几篇文章,我想找到这些文章的标题和链接,怎么找到它们呢?我们需要解析爬取到的页面,提取其中的想要的数据,说到这,就牵扯到Scrapy中一个重要的类——Spider类。Spider类Spider类是用来定义怎样抓取网站或一组站点的,包括如何爬取、如何提取结构化数据等。也就是说我们爬取什么网站,怎么爬取,如何解析这个网站都在Spider中定义。这里说下Spider的抓取周期,有助于我们的理解:生成初始的Requests爬取第一个URLs,并标识回调函数用于接收从requests中下载到的response。通过start_requests()方法获得要执行的第一个请求,该方法默认从start_urls列表中获得 URL来生成请求,并将parse方法作为请求的默认回调函数。在回调函数中,解析response,并返回Item对象、Request对象或一个可迭代的对象。返回的Request对象也包含一个回调函数,稍后会被Scrapy下载,并用指定的回调函数对其处理在回调函数中解析并生成items时,你可以使用Scrapy自带的Selectors,也可以用BeautifulSoup、lxml或其他你熟悉的工具最后返回的items,一般会被持久化地保持到数据库,或用Feed exports导出到不同的文件。(Feed exports的相关介绍可参见Feed exports — Scrapy 2.12.0 documentation)选择器Selectors上面了解了Spider类的作用,从而也知道了,我们要想解析出文章的标题和链接,需要在爬虫程序下的回调函数中解析,也提到了,我们解析数据可以使用Scrapy自带的Selectors,也可以用BeautifulSoup、lxml或其他工具,本教程主要讲解的是Scrapy,因此BeautifulSoup、lxml工具不在此介绍,后面我会出单独的文章,感兴趣的朋友可以关注一下,这里我们主要说下Scrapy自带的Selectors。Scrapy的Selectors是对parsel库的简单封装,为了方便对response对象做处理,关于parsel库可参考Parsel — Parsel 1.9.1 documentation。Scrapy的Selectors包含两种选择器——CSS Selector和XPath Selector,下面分别介绍下。CSS Selector严格意义上来说,CSS不是一个选择器,CSS是一套用来控制HTML文件样式的语言,在Scrapy中可用其来定位内容,所以在Scrapy中我们管他叫CSS选择器。下面是css的查找示例。response.css("title::text").get()XPath SelectorXPath和CSS一样,XPath是一套在XML中查找元素的语言,可在xml文档中对元素和属性进行遍历,除了XML也可用于在HTML文件中快速查找定位,在Scrapy中可用其来定位内容,所以在Scrapy中我们管他叫XPath选择器。下面是XPath的查找示例。response.xpath("//title/text()").get()通过上面两个例子可以看出,两者都是查找标题的,但是使用了两种不同的选择器语法,CSS是通过样式来查找,XPath是通过节点来查找,两者的语法有所区别。后面会有专门的章节讲解选择器如何使用,这里不做过都介绍了,需要深入研究的可以看后面的选择器章节,下面我们直接进入实战。验证选择器知道了如何写选择器,那我们怎么验证我们的选择器写的对不对呢?之前在命令行一章提到过,使用shell命令可以验证我们写的选择器对不对,下面我们来演示下。首先访问我们的网站查看下网站标题为——古月半部落格。然后我们打开装有Scrapy环境的终端,输入下面的命令。scrapy shell https://www.wangzhan.cn2024-11-2514:40:55[scrapy.utils.log]INFO:Scrapy2.11.2started(bot:scrapybot)(此处省略部分日志记录)2024-11-2514:40:56[scrapy.core.engine]INFO:Spider opened2024-11-2514:40:56[scrapy.core.engine]DEBUG:Crawled(200)GET https://www.wangzhan.cn(referer:None)[s]Available Scrapy objects:[s]scrapy scrapy module(contains scrapy.Request,scrapy.Selector,etc)[s]crawlerscrapy.crawler.Crawlerobjectat0x0000016732AB41A0[s]item{}[s]requestGET https://www.wangzhan.cn[s]response200https://www.wangzhan
返回列表