如何使用Scrapy进行Web抓取?

发布于:2023-01-12 ⋅ 阅读:(859) ⋅ 点赞:(0)

这是一个用于提取、处理和存储网络数据的强大框架。

扫码关注《Python学研大本营》

Scrapy 是一个用于 Web 抓取的 Python 框架,它为开发人员提供了一个完整的包,而无需担心维护代码。它为我们提供了从任何网站提取、处理和存储数据所需的所有工具。

在这篇文章中,我们将通过为https://quotes.toscrape.com构建一个网络爬虫来学习 Scrapy 。在这里,我将解释以下几点:

  1. 在你的机器上安装 Scrapy

  2. 使用 Scrapy Shell 测试选择器

  3. 提取特定的数据位

  4. 创建Spider

  5. 将抓取的数据导入 JSON 或 CSV 文件

  6. 从 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赚钱?——安排!

【案例】如何使用Flask构建天气预报 

手把手教你创建简单的Python Flask

扫码关注《Python学研大本营》


网站公告

今日签到

点亮在社区的每一天
去签到