📜  使用 Python-Scrapy 抓取动态内容

📅  最后修改于: 2022-05-13 01:54:49.483000             🧑  作者: Mango

使用 Python-Scrapy 抓取动态内容

假设我们正在从网站等来源读取一些内容,并且我们希望将这些数据保存在我们的设备上。我们可以将数据复制到笔记本或记事本中,以便在以后的工作中重复使用。通过这种方式,我们使用了抓取(如果我们没有字体或数据库,表单 brute 会删除文档、站点和代码中的数据)。

但是现在有很多工具可以抓取一个站点。然而,这个例子选择了Scrapy来抓取Python站点。 Scrapy 是一个从页面中提取数据结构或信息的框架。

安装

首先,我们必须检查计算机上是否安装了Python、scrapy 和 vscode 或类似的编辑器。之后,我们可以选择两种方式启动项目。首先哪个操作虚拟环境(在Python venv或虚拟环境中是开发环境),而在另一种方法中不使用虚拟环境。

使用 venv:在这种情况下,使用了进入 tho 模式 venv 并在此模式下安装 scrapy 的命令源。

没有 venv:对于应用程序,使用命令 pip、pacman 来构建包。

入门

在这部分,安装scrapy后,你在电脑上选择了一个本地创建项目Scrapy,打开终端输入命令scrapy startproject [项目名称],创建项目scrapy。

使用 venv 和不使用 venv:

创建项目的路径后,他们需要输入它。

在项目中是一条名为spiders的路径。根据文档,他们创建了实现站点抓取的蜘蛛。

每个蜘蛛都有一个名称、start_url 和函数方法。

cd example_gfg/example_gfg/spiders
Python3
import scrapy
 
class python_Spider(scrapy.Spider):
    name = ""
    start_urls = []


Python3
import scrapy
 
class python_Spider(scrapy.Spider):
      name = "geeksforgeeks_article"
     
      start_urls = [
        'https://www.geeksforgeeks.org/data-structures/?ref=shm',
      ]
 
    def parse(self, response):


Python3
import scrapy
 
class python_Spider(scrapy.Spider):
    name = "python_events"
     
    start_urls = [
        'https://www.python.org/blogs/',
    ]
 
    def parse(self, response):
         
        for item in response.css('ol'):
         
            yield {
                'title': item.css('a::text').get(),
                'link': item.css('a::attr(href)').get(),
            }



根据上面在Python站点中提取的代码:年份中的事件,蜘蛛名称为python_events和起始URL(蜘蛛名称和起始URL中,我们可以更改)。

蟒蛇3

import scrapy
 
class python_Spider(scrapy.Spider):
      name = "geeksforgeeks_article"
     
      start_urls = [
        'https://www.geeksforgeeks.org/data-structures/?ref=shm',
      ]
 
    def parse(self, response):


我们使用 parse 方法并调用此函数,此函数用于从站点中提取数据,但是,要抓取站点,需要了解命令响应选择器 CSS 和 XPath。

  • 请求:是实现对对象或数据的调用的请求。
  • 响应:它获得对请求的答复。
  • Selector:它代表一种方法,由一个站点的Html中的选择部分或标签组成以进行提取。
  • Scrapy 使用两种方法来选择:
    • XPath:它是一种在使用标签的文档中导航的搜索语言。
    • CSS:它是Cascading Style Sheets,它在HTML 中搜索id 或class 中的标签。

在这个循环中,我们使用 yield(yield 是Python的一个词储备,类似于函数的临时停止或冻结)来创建一个包含事件名称、日期和链接的字典。

蟒蛇3

import scrapy
 
class python_Spider(scrapy.Spider):
    name = "python_events"
     
    start_urls = [
        'https://www.python.org/blogs/',
    ]
 
    def parse(self, response):
         
        for item in response.css('ol'):
         
            yield {
                'title': item.css('a::text').get(),
                'link': item.css('a::attr(href)').get(),
            }


使用 Scrapy Shell 测试项目

Scrapy 有一个 shell,可以测试命令选择器 CSS。

没有 venv 和有 venv:



scrapy shell "https://www.geeksforgeeks.org/data-structures/?ref=shm"
response.css("a").get()
response.css("title").get()
response.css("title::text").get()
response.css("a::text").get() 
response.css("a::attr(href)").get()

示范

  • 我们制作了代码并测试了一个scrapy shell。
  • 我们运行了代码或蜘蛛。
  • 我们将其分为两种形式来开发项目,不带venv或带venv。

没有 venv :我们应该输入项目或蜘蛛的路径来执行命令。

scrapy crawl geeksforgeeks_article

使用 venv :如果我们处于 venv 模式,我们可以在任何路径中执行命令。

scrapy crawl geeksforgeeks_article

我们可以使用以下命令将数据存储在文件中:

scrapy crawl geeksforgeeks_article -O geeksforgeeks_article.csv 

或者

scrapy crawl geeksforgeeks_article -o geeksforgeeks_article.csv

O(在新数据文件中创建和插入)和 o(在新数据文件中创建和附加)是创建新文件和插入的命令。

输出:

输出抓取 1

输出抓取 2