如何在 XML 文件中获取 Scrapy 输出文件?
先决条件:使用 Scrapy 在Python实现 Web Scraping
Scrapy提供了一种快速有效的方法来抓取网站。 Web Scraping 用于从网站中提取数据。在 Scrapy 中,我们创建了一个蜘蛛,然后用它来抓取网站。在本文中,我们将从 worldometers 网站按国家/地区数据提取人口。
让我们逐步实现:
第 1 步:创建 Scrapy 项目
scrapy startproject gfgdemo
我们在命令行中使用上述命令创建项目,然后将目录更改为gfgdemo。之后,我们在我们选择的编辑器中打开项目(这里是 VS Code) 。
第 2 步:为人口创建蜘蛛
scrapy genspider population www.worldometers.info/world-population/population-by-country
一个名为 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文件包含的数据为
输出:
None None
China 1,439,323,776
India 1,380,004,385
United States 331,002,651
Indonesia 273,523,615
.
.
.
Niue 1,626
Tokelau 1,357
Holy See 801