使用Scrapy构建自己的数据集

一、说明

        当我第一次开始在工业界工作时,我很快意识到的一件事是,有时你必须收集、组织和清理自己的数据。在本教程中,我们将从一个名为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 个广告系列被抓取

十一、结语

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

迈克尔·加拉尼克

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Oracle将与Kubernetes合作推出DevOps解决方案!

导读Oracle想成为云计算领域的巨头&#xff0c;但它不是推出自己品牌的云DevOps软件&#xff0c;而是将与CoreOS在Kubernetes端展开合作。七年前&#xff0c;Oracle想要成为Linux领域的一家重量级公司。于是&#xff0c;Oracle主席拉里埃利森&#xff08;Larry Ellison&#xf…

【npm run dev报错】无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本。

1.winX键&#xff0c;使用管理员身份运行power shell 2.输入命令&#xff1a;set-executionpolicy remotesigned 3.输入”Y“,回车&#xff0c;问题解决。 文章来源&#xff1a;无法加载文件 C:\Program Files\nodejs\npm.ps1&#xff0c;因为在此系统上禁止运行脚本。 - 前…

【Node.js】低代码平台源码

一、低代码简介 低代码管理系统是一种通过可视化界面和简化的开发工具&#xff0c;使非专业开发人员能够快速构建和管理应用程序的系统。它提供了一套预先定义的组件和模块&#xff0c;使用户可以通过拖放操作来设计应用程序的界面和逻辑。低代码管理系统还提供了自动化的工作…

pytest运行时参数说明,pytest详解,pytest.ini详解

一、Pytest简介 1.pytest是一个非常成熟的全功能的Python测试框架&#xff0c;主要有一下几个特点&#xff1a; 简单灵活&#xff0c;容易上手&#xff0c;支持参数化 2.能够支持简单的单元测试和复杂的功能测试&#xff0c;还可以用来做selenium、appium等自动化测试&#xf…

7-2 计算物体自由下落的距离

一个物体从100米的高空自由落下。编写程序&#xff0c;求它在前3秒内下落的垂直距离。设重力加速度为10米/秒2。 输入格式: 本题目没有输入。 输出格式: 按照下列格式输出 height 垂直距离值结果保留2位小数。 代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB …

ROS新建工作区(workspace)与包(package)编译的实践(C++示例)

ROS工作区是用来存放ROS工作包的目录&#xff0c;这些工作包&#xff0c;包含了ROS程序的各种文件&#xff0c;包括源代码、配置文件、消息文件等。所以工作区的本质是一个文件夹&#xff0c;用来存放接下来将要介绍的包以及构建这些包所需的文件。ROS工作区可以新建很多&#…

matlab解常微分方程常用数值解法2:龙格库塔方法

总结和记录一下matlab求解常微分方程常用的数值解法&#xff0c;本文将介绍龙格库塔方法&#xff08;Runge-Kutta Method&#xff09;。 龙格库塔迭代的基本思想是&#xff1a; x k 1 x k a k 1 b k 2 x_{k1}x_{k}a k_{1}b k_{2} xk1​xk​ak1​bk2​ k 1 h f ( x k , t …

Linux/centos上如何配置管理samba服务器?

Linux/centos上如何配置管理samba服务器&#xff1f; 1 samba服务相关知识1.1 SMB协议1.2 samba工作原理1.2.1 相关进程1.2.2 samba工作流程1.2.3 samba功能 2 samba服务器安装2.1 利用光驱安装2.2 利用光盘映射文件 3 启动与停止samba服务4 配置samba服务器4.1 samba主配置文件…

06 为什么需要多线程;多线程的优缺点;程序 进程 线程之间的关系;进程和线程之间的区别

为什么需要多线程 CPU、内存、IO之间的性能差异巨大多核心CPU的发展线程的本质是增加一个可以执行代码工人 多线程的优点 多个执行流&#xff0c;并行执行。&#xff08;多个工人&#xff0c;干不一样的活&#xff09; 多线程的缺点 上下文切换慢&#xff0c;切换上下文典型值…

RabbitMQ基础(2)——发布订阅/fanout模式 topic模式 rabbitmq回调确认 延迟队列(死信)设计

目录 引出点对点(simple)Work queues 一对多发布订阅/fanout模式以登陆验证码为例pom文件导包application.yml文件rabbitmq的配置生产者生成验证码&#xff0c;发送给交换机消费者消费验证码 topic模式配置类增加配置生产者发送信息进行发送控制台查看 rabbitmq回调确认配置类验…

Python实现SSA智能麻雀搜索算法优化循环神经网络分类模型(LSTM分类算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 麻雀搜索算法(Sparrow Search Algorithm, SSA)是一种新型的群智能优化算法&#xff0c;在2020年提出&a…

【力扣每日一题】617. 合并二叉树 dfs bfs 8.14打卡

文章目录 题目思路代码 题目 617. 合并二叉树 难度&#xff1a; 简单 描述&#xff1a; 给你两棵二叉树&#xff1a; root1 和 root2 。 想象一下&#xff0c;当你将其中一棵覆盖到另一棵之上时&#xff0c;两棵树上的一些节点将会重叠&#xff08;而另一些不会&#xff0…

SQL | 使用通配符进行过滤

6-使用通配符进行过滤 6.1-LIKE操作符 前面介绍的所有操作符都是通过已知的值进行过滤&#xff0c;或者检查某个范围的值。但是如果我们想要查找产品名字中含有bag的数据&#xff0c;就不能使用前面那种过滤情况。 利用通配符&#xff0c;可以创建比较特定数据的搜索模式。 …

《论文阅读12》RandLA-Net: Efficient Semantic Segmentation of Large-Scale Point Clouds

一、论文 研究领域&#xff1a;全监督3D语义分割&#xff08;室内&#xff0c;室外RGB&#xff0c;kitti&#xff09;论文&#xff1a;RandLA-Net: Efficient Semantic Segmentation of Large-Scale Point Clouds CVPR 2020 牛津大学、中山大学、国防科技大学 论文链接论文gi…

GIT结合Maven对源码以及jar包的管理建设

一、GIT管理规范 1.1 git分支概念 develop分支 开发分支,不管是要做新的feature还是需要做bug修复,都是从这个分支分出来做。 在这个分支下主要负责记录开发状态下相对稳定的版本,即完成了某个feature或者修复了某个bug后的开发稳定版本。 feature-*-*分支 feature-姓名…

Pytorch基于VGG cosine similarity实现简单的以图搜图(图像检索)

代码如下&#xff1a; from PIL import Image from torchvision import transforms import os import torch import torchvision import torch.nn.functional as Fclass VGGSim(torch.nn.Module):def __init__(self):super(VGGSim, self).__init__()blocks []blocks.append(t…

学术论文GPT源码解读:从chatpaper、chatwithpaper到gpt_academic

前言 之前7月中旬&#xff0c;我曾在微博上说准备做“20个LLM大型项目的源码解读” 针对这个事&#xff0c;目前的最新情况是 已经做了的&#xff1a;LLaMA、Alpaca、ChatGLM-6B、deepspeedchat、transformer、langchain、langchain-chatglm知识库准备做的&#xff1a;chatpa…

时序预测 | MATLAB实现EEMD-LSTM、LSTM集合经验模态分解结合长短期记忆神经网络时间序列预测对比

时序预测 | MATLAB实现EEMD-LSTM、LSTM集合经验模态分解结合长短期记忆神经网络时间序列预测对比 目录 时序预测 | MATLAB实现EEMD-LSTM、LSTM集合经验模态分解结合长短期记忆神经网络时间序列预测对比效果一览基本介绍模型搭建程序设计参考资料 效果一览 基本介绍 时序预测 | …

爬虫与搜索引擎优化:通过Python爬虫提升网站搜索排名

作为一名专业的爬虫程序员&#xff0c;我深知网站的搜索排名对于业务的重要性。在如今竞争激烈的网络世界中&#xff0c;如何让自己的网站在搜索引擎结果中脱颖而出&#xff0c;成为关键。今天&#xff0c;和大家分享一些关于如何通过Python爬虫来提升网站的搜索排名的技巧和实…

动态优先权算法

1.设计目的与要求 1.1设计目的 通过动态优先权算法的模拟加深对进程概念和进程调度过程的理解。 1.2设计要求 本实验要求学生独立地用C或C语言编写一个简单的进程管理程序&#xff0c;其主要部分是进程调度。调度算法可由学生自行选择&#xff0c;如基于动态优先级的调度算法…