使用Scrapy构建自己的数据集

news2024/9/25 23:11:41

一、说明

        当我第一次开始在工业界工作时,我很快意识到的一件事是,有时你必须收集、组织和清理自己的数据。在本教程中,我们将从一个名为FundRazr的众筹网站收集数据。像许多网站一样,该网站有自己的结构、形式,并有大量可访问的有用数据,但由于它没有结构化的 API,很难从网站获取数据。因此,我们将通过网络抓取网站以获取非结构化网站数据,并放入有序形式以构建我们自己的数据集。

        为了抓取网站,我们将使用Scrapy。简而言之,Scrapy 是一个框架,旨在更轻松地构建网络爬虫并减轻维护它们的痛苦。基本上,它允许您专注于使用 CSS 选择器和选择 XPath 表达式的数据提取,而不是蜘蛛应该如何工作的复杂内部。这篇博文超出了抓取文档中的出色官方教程,希望如果您需要更难地抓取一些东西,您可以自己完成。有了这个,让我们开始吧。如果您迷路了,我建议您在单独的选项卡中打开视频。

二、安装入门(先决条件)

        如果您已经拥有 anaconda 和谷歌浏览器(或 Firefox),请跳到创建新的 Scrapy 项目。

        1. 在你的操作系统上安装 Anaconda (Python)。您可以从官方网站下载 anaconda 并自行安装,也可以按照下面的这些 anaconda 安装教程进行操作。

    Installing Anaconda

        2. 安装Scrapy(anaconda 附带它,但以防万一)。您还可以在终端 (mac/linux) 或命令行 (windows) 上安装。您可以输入以下内容:

conda install -c conda-forge scrapy 

        3.确保您拥有谷歌浏览器或火狐浏览器。在本教程中,我使用的是谷歌浏览器。如果您没有谷歌浏览器,可以使用此链接在此处安装它。

三、创建一个新的 Scrapy 项目

        1.打开终端(mac/linux)或命令行(窗口)。导航到所需的文件夹(如果需要帮助,请参阅下图)并键入

    scrapy startproject fundrazr 

scrapy的开始项目基金,这将创建一个包含以下内容的fundrazr目录:

Fundrazr项目目录

四、使用谷歌浏览器(或火狐浏览器)上的检查查找良好的开始网址

        在爬虫框架中,start_urls是蜘蛛将开始爬行的URL列表,当没有指定特定的URL时。我们将使用start_urls列表中的每个元素作为获取单个广告系列链接的方法。

        1.下图显示,根据您选择的类别,您将获得不同的起始URL。黑色突出显示的部分是可能抓取的基金类别。

找到一个好的start_url

        对于本教程,列表start_urls中的第一个是:

        Raise money for Health, Illness & Medical Treatments - FundRazr

        2.这部分是关于获取要放入start_urls列表中的其他元素。我们正在了解如何转到下一页,以便我们可以获取其他 url 以放入start_urls

通过检查“下一步”按钮获取要放入列表中的其他元素 start_urls

        第二个起始网址是:Raise money for Health, Illness & Medical Treatments - FundRazr

        下面的代码将在本教程后面的蜘蛛代码中使用。它所做的只是列出start_urls。变量 npages 只是我们希望从中获取广告系列链接的其他页面数量(在第一页之后)。

start_urls = ["https://fundrazr.com/find?category=Health"]

npages = 2

# This mimics getting the pages using the next button. 
for i in range(2, npages + 2 ):
	start_urls.append("https://fundrazr.com/find?category=Health&page="+str(i)+"")

        根据网站当前结构生成其他起始 URL 的代码

五、用于查找单个广告系列链接的刮擦外壳

        学习如何使用Scrapy提取数据的最佳方法是使用Scrapy shell。我们将使用 XPaths,它可用于从 HTML 文档中选择元素。

        我们将尝试获取xpath的第一件事是各个广告系列链接。首先,我们检查广告系列在HTML中的大致位置。

查找指向单个广告系列的链接

        我们将使用 XPath 提取包含在下面红色矩形中的部分。

        随附的部分是我们将隔离的部分网址

        在终端类型 (mac/linux) 中:

scrapy shell 'https://fundrazr.com/find?category=Health'

在命令行类型(窗口)中:

scrapy shell “https://fundrazr.com/find?category=Health"

在 scrapy shell 中键入以下内容(为了帮助理解代码,请观看视频):

response.xpath("//h2[contains(@class, 'title headline-font')]/a[contains(@class, 'campaign-link')]//@href").extract()

        随着网站随着时间的推移而更新,您很有可能会得到不同的部分网址

        下面的代码用于获取给定起始网址的所有活动链接(稍后在第一个蜘蛛部分详细介绍)

for href in response.xpath("//h2[contains(@class, 'title headline-font')]/a[contains(@class, 'campaign-link')]//@href"):
	# add the scheme, eg http://
	url  = "https:" + href.extract() 

通过键入 exit() 退出 Scrapy Shell。 

        退出 Scrapy Shell

六、检查单个广告系列

        虽然我们之前应该了解各个广告系列链接的结构,但本节将介绍各个广告系列的链接。

  1. 接下来,我们转到单个广告系列页面(请参阅下面的链接)进行抓取(我应该注意,其中一些广告系列很难查看)

Please help to save Yvonne by Yvonne Foong

    2.使用与以前相同的检查过程,我们检查页面上的标题

检查广告系列标题

3.现在我们将再次使用刮擦外壳,但这次是个人活动。我们这样做是因为我们想了解各个广告系列的格式(包括了解如何从网页中提取标题)。

在终端类型 (mac/linux) 中:

scrapy shell 'https://fundrazr.com/savemyarm'

在命令行类型(窗口)中:

scrapy shell “https://fundrazr.com/savemyarm"

获取广告系列标题的代码是

response.xpath("//div[contains(@id, 'campaign-title')]/descendant::text()").extract()[0]

4.我们可以对页面的其他部分执行相同的操作。

募集金额:

response.xpath("//span[contains(@class,'stat')]/span[contains(@class, 'amount-raised')]/descendant::text()").extract()

目标:

response.xpath("//div[contains(@class, 'stats-primary with-goal')]//span[contains(@class, 'stats-label hidden-phone')]/text()").extract()

货币类型:

response.xpath("//div[contains(@class, 'stats-primary with-goal')]/@title").extract()

活动结束日期:

response.xpath("//div[contains(@id, 'campaign-stats')]//span[contains(@class,'stats-label hidden-phone')]/span[@class='nowrap']/text()").extract()

贡献者数量:

response.xpath("//div[contains(@class, 'stats-secondary with-goal')]//span[contains(@class, 'donation-count stat')]/text()").extract()

故事:

response.xpath("//div[contains(<a data-cke-saved-href="http://twitter.com/id" href="http://twitter.com/id" class="af ov">@id</a>, 'full-story')]/descendant::text()").extract() 

网址:

response.xpath("//meta[<a data-cke-saved-href="http://twitter.com/property" href="http://twitter.com/property" class="af ov">@property</a>='og:url']/@content").extract() 

5. 通过键入退出刮擦外壳:

 exit() 

七、项目

        抓取的主要目标是从非结构化源(通常是网页)中提取结构化数据。Scrapy Spiders可以将提取的数据作为Python字典返回。虽然方便和熟悉,但 Python 词典缺乏结构:很容易在字段名称中输入错误或返回不一致的数据,尤其是在具有许多蜘蛛的大型项目中(几乎是从伟大的刮擦官方文档中逐字复制的!

我们将要修改的文件items.py 的代码在这里。

将其保存在fundrazr/fundrazr目录下(覆盖原始 items.py 文件)。

本教程中使用的 item 类(基本上是我们在输出数据之前存储数据的方式)如下所示。

items.py 代码

八、蜘蛛

        蜘蛛是您定义的类,Scrapy 使用它从网站(或一组网站)中抓取信息。我们的蜘蛛的代码如下。

        Fundrazr 刮擦代码,在此处下载代码。

        将其保存在fundrazr/spiders目录下的名为fundrazr_scrape.py的文件中。

        当前项目现在应具有以下内容:

我们将创建/添加的文件

九、运行蜘蛛

  1. 转到fundrazr/fundrazr目录并键入:
scrapy crawl my_scraper -o MonthDay_Year.csv 

        刮擦爬行my_scraper -o MonthDay_Year.csv

        2. 数据应输出在基金/基金目录中。

数据输出位置

十、我们的数据

  1. 本教程中输出的数据应大致如下图所示。抓取的各个广告系列会随着网站的不断更新而有所不同。此外,每个单独的广告系列之间可能会有空格,因为 excel 正在解释 csv 文件。

数据应大致采用此格式。

        2.如果您想下载一个更大的文件(它是通过将npages = 2更改为npages = 450并添加download_delay = 2来完成的),您可以通过从我的github下载文件来下载一个更大的文件,其中包含大约6000个广告系列。该文件称为MiniMorningScrape.csv(它是一个大文件)。

大约 6000 个广告系列被抓取

十一、结语

        创建数据集可能是一项繁重的工作,并且经常是学习数据科学中被忽视的部分。我们没有回顾的一件事是,虽然我们抓取了大量数据,但我们仍然没有清理足够的数据来进行分析。不过,这是另一篇博客文章。

迈克尔·加拉尼克

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/889838.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vs code 环境变量的配置

问题 环境变量中重复出现下面这两项 ..:/home/xxx/.local/bin/:/home/xxx/.local/bin/:...这造成了一些环境污染&#xff0c;因为/home/xxx/.local/bin 这个环境变量放在前面&#xff0c;文件夹里面的可执行的文件会比conda环境更加优先地执行。 解决 先说结论&#xff0c;…

数字孪生重塑生产格局:智慧工厂的前景与挑战

随着科技的飞速发展&#xff0c;数字孪生技术在智慧工厂的建设中正展现出令人瞩目的作用。数字孪生&#xff0c;一种将实际物理对象与数字虚拟模型相结合的前沿技术&#xff0c;不仅改变了生产方式&#xff0c;更为智慧工厂的未来描绘了一幅令人振奋的画卷。 在智慧工厂的建设…

Java实现敏感词过滤功能

敏感词过滤功能实现 1.GitHub上下载敏感词文件 2.将敏感词文件放在resources目录下 在业务中可以将文本中的敏感词写入数据库便于管理。 3.提供实现类demo 代码编写思路如下&#xff1a;1.将敏感词加载到list中&#xff0c;2.添加到StringSearch中&#xff0c;3.校验&#x…

SSL证书如何使用?SSL保障通信安全

由于SSL技术已建立到所有主要的浏览器和WEB服务器程序中&#xff0c;因此&#xff0c;仅需安装数字证书或服务器证书就可以激活功能了。SSL证书主要是服务于HTTPS&#xff0c;部署证书后&#xff0c;网站链接就由HTTP开头变为HTTPS。 SSL安全证书主要用于发送安全电子邮件、访…

最新发布!2023版贵州省标准地图

日前&#xff0c;贵州省自然资源厅最新发布了10幅2023版《贵州省标准地图》&#xff0c;涉及政区、水系、交通、全要素等专题。此次发布的新版《贵州省标准地图》&#xff0c;紧紧围绕聚焦实事、铆定实用、主推实效、力主实惠而组织编制。 贵州省自然资源厅将编制出版2023版《…

TCP拥塞控制详解 | 2. 背景

网络传输问题本质上是对网络资源的共享和复用问题&#xff0c;因此拥塞控制是网络工程领域的核心问题之一&#xff0c;并且随着互联网和数据中心流量的爆炸式增长&#xff0c;相关算法和机制出现了很多创新&#xff0c;本系列是免费电子书《TCP Congestion Control: A Systems …

视频云存储/安防监控/视频汇聚EasyCVR平台新增经纬度选取功能

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。音视频流媒体视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、…

1x1 卷积:解释器

一、说明 在这篇博客中&#xff0c;我们将尝试深入探讨 1x1 卷积操作的概念&#xff0c;该概念出现在 Lin等人 &#xff08;2013&#xff09; 的论文“网络中的网络”和 Szegedy 等人 &#xff08;2014&#xff09; 的论文“Go Deep with Convolutions” 中&#xff0c;该论文提…

MYSQL基本命令和操作

&#x1f58a;作者 : D. Star. &#x1f4d8;专栏 : JAVA &#x1f606;今日提问 : 你好&#xff0c;我的朋友&#xff0c;在你的人生途中&#xff0c;会面临很多选择&#xff0c;不管选什么样的结果&#xff0c;我们都多少会有些后悔。如果是你&#xff0c;你会选择爱你的&…

win10系统docker创建ubuntu容器解决开发环境问题

一、win10系统使用docker的原因 最近啊&#xff0c;在学习人工智能-深度学习&#xff0c;用的win10系统进行开发&#xff0c;老是出现一些莫名其妙的问题&#xff0c;无法解决&#xff0c;每天都在为环境问题搞得伤透了脑筋。 说到底还是要使用Linux系统进行开发比较合适。 …

无涯教程-Perl - time函数

描述 此函数返回自纪元以来的秒数(对于大多数系统,是1970年1月1日UTC,00:00:00&#xff1b;对于Mac OS,是1904年1月1日,00:00:00)。适用于gmtime和本地时间。 语法 以下是此函数的简单语法- time返回值 此函数返回自纪元后数秒的整数。 例 以下是显示其基本用法的示例代…

软件项目验收测试:验证软件功能与性能的有效手段

软件验收测试是软件产品周期中的最后一个测试活动&#xff0c;因此也叫交付测试。目的是确保软件准备就绪&#xff0c;并且可以让最终用户将其用于执行软件的既定功能和任务。 一、软件项目验收测试的重要性 1、软件项目验收测试是确保软件交付前质量的重要环节。在软件项目开…

小程序-基于vant的Picker组件实现省市区选择

一、原因 因vant/area-data部分的市/区数据跟后台使用的高德/腾讯省市区有所出入&#xff0c;故须保持跟后台用同一份数据&#xff0c;所以考虑以下几个组件 1、Area 2、Cascader 3、Picker 因为使用的是高德地图的省市区json文件&#xff0c;用area的话修改结构代价太大&…

netstat -ano|findstr 使用方法

一、查看占用端口 &#xff0c;得到进程id netstat -ano|findstr “8080” 1&#xff1a;协议 2&#xff1a;本地地址 3&#xff1a; 外部地址 4&#xff1a; 状态 5&#xff1a; PID 二、查询进程ID对应的进程名称 tasklist|findstr “12448” 三、关闭单个进程 taskkill /…

Matlab 在一张图中画多个机械臂

在matlab中第一次画机械臂时&#xff0c;可能会出现的问题是Link函数不识别&#xff08;如出现Link输入参数不对等) 这大概率是因为缺少matlab工具箱&#xff0c;如图 需要下载该软件包&#xff0c;然后用Matlab打开&#xff0c;就能自动安装到matlab中。下载地址在这个超链接…

【Harbor】使用手册

一、Harbor使用方式 Harbor 作为镜像仓库&#xff0c;主要的交互方式就是 将镜像上传到Harbor上&#xff0c;以及从Harbor上下载指定镜像 在传输镜像前&#xff0c;可以先使用 Harbor 提供的权限管理&#xff0c;将项目设置为私有项目&#xff0c;并对不同用户设置不同角色&…

最详细修改antd组件select的滚动条样式

自带的select的滚动条样式又黑又粗,丑陋.接下来我们改造他 初始代码 .contain {.btn {margin-top: 60px;margin-left: 60px;:global {.ant-btn {width: 200px;height: 100px;border-radius: 6px;}}} } <div className{styles.contain}><Selectmode"tags"p…

KMPBC:KMP算法及其改进(kmp with bad character)

前言 最近在看字符串匹配算法&#xff0c;突然灵光一闪有了想法&#xff0c;可以把kmp算法时间效率提高&#xff0c;同时保持最坏时间复杂度O(nm)不变。其中n为主串长度&#xff0c;m为模式串长度&#xff0c;经测试可以块3-10倍&#xff0c;以为发现了新大陆&#xff0c;但是…

Deep Automatic Natural Image Matting

https://github.com/JizhiziLi/AIM 工程地址 抠图的传统方法通常是基于 trimap&#xff08;三值图&#xff09;对前景、背景和 alpha 进行估计&#xff0c;但当图像中的前景和背景颜色相似或有着比较复杂的纹理时&#xff0c;传统算法很难取得比较好的效果。 自动图像抠图(A…

《华为认证》双机热备份简介

定义 双机热备份&#xff08;Hot-Standby Backup&#xff09;是指&#xff0c;当两台设备在确定主用&#xff08;Master&#xff09;设备和备用&#xff08;Backup&#xff09;设备后&#xff0c;由主用设备进行业务的转发&#xff0c;而备用设备处于监控状态&#xff0c;同时…