这是一个用于提取、处理和存储网络数据的强大框架。
扫码关注《Python学研大本营》
Scrapy 是一个用于 Web 抓取的 Python 框架,它为开发人员提供了一个完整的包,而无需担心维护代码。它为我们提供了从任何网站提取、处理和存储数据所需的所有工具。
在这篇文章中,我们将通过为https://quotes.toscrape.com构建一个网络爬虫来学习 Scrapy 。在这里,我将解释以下几点:
在你的机器上安装 Scrapy
使用 Scrapy Shell 测试选择器
提取特定的数据位
创建Spider
将抓取的数据导入 JSON 或 CSV 文件
从 Python 脚本运行 Scrapy spider
虽然对 Python 和 CSS/XPATH 选择器的工作原理有一些了解会很好,但我正在为完全的初学者编写本教程。因此,您可以确定您将能够遵循该过程的每个步骤。
在你的机器上安装 Scrapy
要安装 Scrapy,请在终端上运行以下命令:
pip install scrapy
使用 Scrapy shell 测试选择器
Scrapy 还提供了一个名为Scrapy Shell的网络爬虫 shell ,开发人员可以使用它来测试他们对网站行为的假设。
我们将爬取https://quotes.toscrape.com/ 以收集报价、作者姓名和标签。首先,让我们运行scrapy shell < site_name > :
scrapy shell “https://quotes.toscrape.com/”
您在命令行上的输出将是这样的:
它将返回 200 的响应状态码,表示成功。您可以使用以下命令查看页面的原始 HTML:
Print(response.text)
提取特定的数据位
因为,我们只需要来自整个脚本的相关信息,使用浏览器开发工具,我们将检查需要的元素以进行抓取。
右键单击我们想要的元素,然后单击inspect.
浏览器的开发者工具将帮助您进行网页抓取。
仔细一看,我们想要抓取的所有信息都用<div>
class =包裹”quote"
在所有卡片上。
现在让我们通过键入以下内容将此类用作选择器:
response.css('div.quote').extract()
在scrapy shell中。输出将是这样的:
注意:extract() 函数,提取满足 CSS 选择器的元素列表。
现在通过查看每张卡片,它在第一个 中包含Quote,在第二个 中包含作者姓名,在最后一个子元素(即
元素)中包含标签。
所以我们需要遍历每张卡片来获取相关数据。
创建Spider
import scrapy
from scrapy.crawler import CrawlerProcess
class quoteSpider(scrapy.Spider):
name = 'quoteScraper'
custom_settings = {
# export as JSON format
"FEED_FORMAT" : "json",
"FEED_URI" : "scrape_data.json"
}
start_urls = ['https://quotes.toscrape.com/']
def parse(self,response):
allQuotes = response.css('div.quote')
for i in range(len(allQuotes)):
quotes = allQuotes[i].css('span.text::text').extract_first()
author = allQuotes[i].css('small.author::text').extract_first()
tags = allQuotes[i].css('div.tags a.tag::text').extract()
data = {'quote':quotes,'author':author,'tags':tags}
yield data
process = CrawlerProcess()
process.crawl(quoteSpider)
process.start()
让我们分解这段代码:
我们在文件顶部将 Scrapy 导入到我们的项目中,并使用 CrawlerProcess 启动我们的 scrapy 爬虫。
创建了一个从 Scrapy 继承 'Spider' 的类。类包含名称,即spider名称。
然后我们为spider自定义设置,我们在其中定义输出格式。它将在文件scrape_data.json中导出所有抓取的数据
为了给我们的spider一个目标页面,我们使用了
start_urls = [' https://quotes.toscrape.com/']
. 我们本可以添加一个用逗号分隔的 URL 列表,但稍后我们将让我们的爬虫在网站的分页中移动。所以,我们只提供了第一页。parse(self, response):每当一个 URL 爬取成功时都会调用这个函数。在这里,我们告诉 Scrapy 我们希望它在 HTML 中找到什么信息
从 Python 脚本运行 scrapy spider
现在是时候执行我们的spider了,运行以下命令来执行你的第一个spider:
python file_name.py
如果一切正常,抓取的数据将记录到您的命令行中。并检查脚本文件目录中的输出生成文件。
参考: https://en.wikipedia.org/wiki/Scrapy https://docs.scrapy.org/en/latest/ https://medium.com/@muhammadhassanniazi85/web-scraping-in-python-using-scrapy-first-spider-24dd60016b31
推荐书单
《Python网络爬虫从入门到精通》
购买链接:https://item.jd.com/13291912.html
《Python网络爬虫从入门到精通》从初学者角度出发,通过通俗易懂的语言、丰富多彩的实例,详细介绍了使用Python实现网络爬虫开发应该掌握的技术。全书共分19章,内容包括初识网络爬虫、了解Web前端、请求模块urllib、请求模块urllib3、请求模块requests、高级网络请求模块、正则表达式、XPath解析、解析数据的BeautifulSoup、爬取动态渲染的信息、多线程与多进程爬虫、数据处理、数据存储、数据可视化、App抓包工具、识别验证码、Scrapy爬虫框架、Scrapy_Redis分布式爬虫、数据侦探。书中所有知识都结合具体实例进行介绍,涉及的程序代码给出了详细的注释,读者可轻松领会网络爬虫程序开发的精髓,快速提高开发技能。
《Python网络爬虫从入门到精通》从零基础开始,提供了Python网络爬虫开发从入门到编程高手所必需的各类知识。无论有没有Python基础,通过本书你都能最终成为网络爬虫高手。
(1)主流技术,全面解析。本书涵盖网页抓取、App抓包、识别验证码、Scrapy爬虫框架,以及Scrapy_Redis分布式爬虫等技术,一本书教你掌握网络爬虫领域的主流核心技术。
(2)由浅入深,循序渐进。本书引领读者按照基础知识→核心技术→高级应用→项目实战循序渐进地学习,符合认知规律。
(3)边学边练,学以致用。200个应用示例+1个行业项目案例+136集Python零基础扫盲课,边学边练,在实践中提升技能。
(4)精彩栏目,贴心提醒。本书设置了很多“注意”“说明”“技巧”等小栏目,让读者在学习的过程中更轻松地理解相关知识点及概念,更快地掌握数据分析技能和应用技巧。
(5)在线解答,高效学习。在线答疑QQ及技术支持网站,不定期进行在线直播课程。
精彩回顾
扫码关注《Python学研大本营》