当前位置: 首页 > 科技观察

谨慎使用!从入门到精通,本文带你学习监狱爬虫Python

时间:2023-03-19 17:20:50 科技观察

网络爬虫,简单来说就是从网络中批量获取自己想要的数据。Web抓取数据可以通过两种方式实现:使用官方APIWeb抓取API(ApplicationProgrammingInterface)是以一种标准的方式在不同系统之间交换数据。然而,大多数时候,网站所有者不提供任何API。在这种情况下,我们只能使用网络抓取来提取数据。基本上,每个网页都是以HTML格式从服务器返回的,这意味着我们的实际数据很好地包装在HTML元素中。这使得检索特定数据的整个过程非常简单明了。本教程将是一个从头到尾的指南,让您尽可能轻松地学习如何使用Python进行数据抓取。首先,我将向您介绍一些基本示例,让您熟悉网络抓取。稍后,我们将使用这些知识从Livescore.cz中提取足球比赛数据。入门要开始,您需要启动一个新的Python3项目并安装Scrapy(Python的网络爬虫库)。我在本教程中使用了pipenv,但您也可以使用pip和venv,或conda。pipenvinstallscrapy#Pipenvinstallscrap现在,你有了Scrapy,但你仍然需要创建一个新的网络抓取项目,为此Scrapy提供了一个命令行来为我们完成这项工作。现在,让我们使用scrapyclii创建一个名为web_scraper的新项目。如果您像我一样使用pipenv,请使用:pipenvrunscrapystartprojectweb_scraper或者在您自己的虚拟环境中,使用:scrapystartprojectweb_scraper这将在工作目录中创建一个具有以下结构的基本项目:01.使用XPath我们将从一个非常简单的示例开始我们的网页抓取教程。首先,我们将在HTML中找到LiveCodeStream网站徽标。正如我们所知,它只是一个文本,而不是图像,因此我们将简单地提取该文本。代码首先,我们需要为此项目创建一个新的爬虫。我们可以通过创建新文件或使用CLI来完成此操作。由于我们已经知道我们需要的代码,所以我们将在这个路径/web_scraper/spiders/live_code_stream.py中创建一个新的Python文件,下面是这个文件中的代码。代码说明首先,我们导入Scrapy库,因为我们需要它的功能来创建Python网络蜘蛛。该爬虫将用于爬取指定的网站并提取有用的信息。我们创建了一个类并将其命名为LiveCodeStreamSpider。基本上,它扩展了scrapy。这就是我们将其作为参数传递的原因。现在,重要的一步是使用名为name的变量为您的蜘蛛定义一个唯一的名称。请记住,不允许使用现有蜘蛛的名称。同样,不能使用此名称创建新的搜寻器。它在整个项目中必须是唯一的。之后,我们使用start_urls列表传递网站URL。parse()方法,该方法将在HTML代码中定位标签并提取其文本。在Scrapy中,有两种方法可以在源代码中查找HTML元素。这些都在下面提到:CSS和XPath您甚至可以使用一些外部库,如BeautifulSoup和lxml。但是,对于此示例,我们使用了XPath。确定任何HTML元素的XPath的快速方法是在ChromeDevtools中打开它。现在,只需右键单击该元素的HTML代码并将鼠标光标悬停在刚刚出现的弹出菜单中的“复制”上。最后,单击“复制XPath”菜单项。请查看下面的屏幕截图以更好地理解它。顺便说一句,我在元素的实际XPath之后使用/text()来仅检索该元素的文本,而不是完整的元素代码。注意:不要对上述变量、列表或函数使用任何其他名称。这些名称是在Scrapy库中预定义的。因此,您必须实际使用它们。否则,程序将无法正常运行。运行scraper,因为我们已经在命令提示符下的web_scraper文件夹中。让我们执行蜘蛛并使用下面的代码将结果填充到新文件lcs.json中。我们得到的结果将使用JSON格式进行很好的结构化。pipenvrunscrapycrawllcs-olcs.jsonscrapycrawllcs-olcs.json结果当执行上面的代码时,我们会在项目文件夹中看到一个新的文件lcs.json。下面是这个文件的内容。[{“徽标”:“LiveCodeStream”}]02。使用CSS我们大多数人都喜欢足球之类的运动。足球比赛经常在世界各地举办。有几个网站可以在玩游戏时提供游戏结果的实时反馈。但是,这些站点中的大多数不提供任何官方API。反过来,它为我们创造了一个机会,可以使用我们的网络抓取技能并提取有意义的信息,直接抓取他们的网站。在他们的主页上,他们很好地展示了今天(您访问该网站的日期)将要进行的游戏和比赛。我们可以检索诸如游戏名称游戏时间团队A名称团队A目标团队B团队名称B团队目标等信息。在我们的代码示例中,我们将提取今天有比赛的游戏名称。代码让我们在我们的项目中创建一个新的蜘蛛来检索比赛名称,我将项目命名为livescore_t.py下面是你需要在livescore_t.py中输入的代码:.Spider给我们的爬虫起一个唯一的名字LiveScoreT提供livescore.cz的URL最后用parse()函数遍历所有包含比赛名称的匹配元素,用yield把它们连接起来。最后,我们将收到今天有游戏的所有游戏名称。需要注意的一件事是,这次我使用CSS而不是XPath。运行是时候查看我们的爬虫了。运行下面的命令让蜘蛛进入Livescore.cz网站的主页。然后,网络抓取结果将被添加到一个名为ls_t.json的新文件中。pipenvrunscrapycrawlLiveScoreT-ols_t.json结果这是我们的爬虫在2020年11月18日从Livescore.cz中提取的内容。请记住,输出可能每天都在变化。03.更高级的示例在本节中,我们将不只是检索锦标赛名称,而是进入下一阶段并获取锦标赛及其比赛的完整详细信息。在/web_scraper/web_scraper/spider/中创建一个新文件并将其命名为livescore.py。代码说明该文件的代码结构与前面的例子相同。在这里,我们刚刚用一个新函数更新了parse()方法。基本上,我们从页面中提取了所有HTML元素。然后我们循环查看这是一场锦标赛还是一场比赛。如果是比赛,我们提取它的名字。如果是一场比赛,我们提取了它的“时间”、“状态”和“双方球队的名字和分数”,在控制台中运行以下命令并执行它pipenvrunscrapycrawlLiveScore-ols.json以下结果是已检索到的一些示例:现在有了这些数据,我们可以做任何我们想做的事,比如用它来训练我们自己的神经网络来预测未来的比赛。04.总结数据分析师经常使用网络抓取,因为它可以帮助他们收集数据来预测未来。同样,企业使用它从网页中提取电子邮件,因为它是产生潜在客户的有效方式。我们甚至可以用它来监控产品的价格。换句话说,网络抓取有很多用例,而Python完全有能力做到这一点。你还在等什么?立即尝试抓取您喜欢的网站。