使用 Python-Scrapy 抓取动态内容
假设我们正在从网站等来源读取一些内容,并且我们希望将这些数据保存在我们的设备上。我们可以将数据复制到笔记本或记事本中,以便在以后的工作中重复使用。通过这种方式,我们使用了抓取(如果我们没有字体或数据库,表单 brute 会删除文档、站点和代码中的数据)。
但是现在有很多工具可以抓取一个站点。然而,这个例子选择了Scrapy来抓取Python站点。 Scrapy 是一个从页面中提取数据结构或信息的框架。
安装
首先,我们必须检查计算机上是否安装了Python、scrapy 和 vscode 或类似的编辑器。之后,我们可以选择两种方式启动项目。首先哪个操作虚拟环境(在Python venv或虚拟环境中是开发环境),而在另一种方法中不使用虚拟环境。
使用 venv:在这种情况下,使用了进入 tho 模式 venv 并在此模式下安装 scrapy 的命令源。
command which install python –> sudo pacman -S python
command which install vs-code –> sudo pacman -S code
command which install scrapy in computer –> sudo pacman -S scrapy
command to create a development ambient –> python3.9 -m venv venv
command to execute or open development ambient –> source venv/bin/activate
command which install scrapy in python packages in development ambient –> pip install scrapy
没有 venv:对于应用程序,使用命令 pip、pacman 来构建包。
command which install python –> sudo pacman -S python
command which install vs-code –> sudo pacman -S code
command which install scrapy in computer –> sudo pacman -S scrapy
command which install scrapy in python packages –> pip install scrapy
入门
在这部分,安装scrapy后,你在电脑上选择了一个本地创建项目Scrapy,打开终端输入命令scrapy startproject [项目名称],创建项目scrapy。
使用 venv 和不使用 venv:
command which starting project in scrapy –> scrapy startproject example_gfg
创建项目的路径后,他们需要输入它。
command cd to enter in path of projects –> cd example_gfg
在项目中是一条名为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(在新数据文件中创建和附加)是创建新文件和插入的命令。