📜  如何在 XML 文件中获取 Scrapy 输出文件?

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

如何在 XML 文件中获取 Scrapy 输出文件?

先决条件:使用 Scrapy 在Python实现 Web Scraping

Scrapy提供了一种快速有效的方法来抓取网站。 Web Scraping 用于从网站中提取数据。在 Scrapy 中,我们创建了一个蜘蛛,然后用它来抓取网站。在本文中,我们将从 worldometers 网站按国家/地区数据提取人口。

让我们逐步实现:

第 1 步:创建 Scrapy 项目

scrapy startproject gfgdemo

我们在命令行中使用上述命令创建项目,然后将目录更改为gfgdemo。之后,我们在我们选择的编辑器中打开项目(这里是 VS Code)

第 2 步:为人口创建蜘蛛



一个名为 corona.py 的新文件被添加到蜘蛛目录中。

第 3 步:对population.py 进行以下更改

Python3
# only keep the base domain
allowed_domains = ['www.worldometers.info'] 
  
# change http to https
start_urls = ['https://www.worldometers.info/world-population/population-by-country/']


Python3
def parse(self, response):
        countries = response.xpath("//tr")
      
        for country in countries:
            name = country.xpath("(.//td)[2]/a/text()").get()
            population = country.xpath("(.//td)[3]/text()").get()
            yield {
                'name':name,
                'population':population
  
            }


第 4 步:准备文件以抓取数据

首先,我们将访问 www.worldometers.info/world-population/population-by-country 并禁用 javascript 如下

  • Ctrl+Shift+i打开检查器工具
  • 然后按Ctrl+Shift+p并编写 javascript 并单击黄色显示的调试器以禁用 javascript,然后刷新页面。



  • 在此之后,我们将使用 xpath 选择器选择要抓取的部分。

  • 编写用于提取特定数据的代码。我们在spider的parse方法中编写如下代码。

蟒蛇3

def parse(self, response):
        countries = response.xpath("//tr")
      
        for country in countries:
            name = country.xpath("(.//td)[2]/a/text()").get()
            population = country.xpath("(.//td)[3]/text()").get()
            yield {
                'name':name,
                'population':population
  
            }

第 5 步:抓取数据

在命令行中编写以下命令来抓取国家名称及其人口的数据。

scrapy crawl population

我们将数据作为命令行输出获取,如上所示。

为了将数据提取为 XML 文件,我们在命令行中编写了以下代码。

scrapy crawl {spider} -o {filename}.xml
Ex: scrapy crawl population -o data.xml

输出:

这将在项目目录中创建一个包含抓取数据的 XML 文件。此处的data.xml文件包含的数据为

输出:



NoneNone
China1,439,323,776
India1,380,004,385
United States331,002,651
Indonesia273,523,615
.
.
.
Niue1,626
Tokelau1,357
Holy See801