如何构建一个基本的网络爬虫来从网站中提取信息

有没有想过从网站上获取信息?下面是如何编写一个爬虫来导航网站并提取您需要的内容。...

从网站或网络爬虫读取信息的程序有各种有用的应用程序。你可以从推特账户中获取股票信息、体育成绩、文本,或者从购物网站上获取价格。

编写这些网络爬网程序比你想象的要容易。Python有一个很棒的库,用于编写从网站提取信息的脚本。让我们看看如何使用Scrapy创建web爬虫。

安装刮板

Scrapy是一个Python库,创建它是为了刮取web并构建web爬虫。它快速、简单,可以轻松地浏览多个网页。

Scrapy可以通过Pip安装Python(Pip)库获得,下面是关于如何在Windows、Mac和Linux上安装Pip的更新。

首选使用Python虚拟环境,因为它将允许您将Scrapy安装在一个虚拟目录中,而该虚拟目录不会影响您的系统文件。Scrapy的文档建议这样做以获得最佳结果。

创建目录并初始化虚拟环境。

mkdir crawlercd crawlervirtualenv venv. venv/bin/activate

现在可以使用PIP命令将Scrapy安装到该目录中。

pip install scrapy

快速检查以确保Scrapy安装正确

scrapy# printsScrapy 1.4.0 - no active projectUsage: scrapy <command> [opti***] [args]Available commands: bench Run quick benchmark test fetch Fetch a URL using the Scrapy downloader genspider Generate new spider using pre-defined templates runspider Run a self-contained spider (without creating a project)...

如何构建网络爬虫

现在环境已经就绪,您可以开始构建web爬虫了。让我们从维基百科的电池页面上搜集一些信息:https://en.*********.org/wiki/Battery_(电)。

编写爬虫程序的第一步是定义一个从Scrapy.Spider扩展而来的Python类。这使您可以访问Scrapy中的所有功能。让我们把这个类称为蜘蛛1。

spider类需要一些信息:

  • 用来识别蜘蛛的名字
  • 一个start_URL变量,包含要从中爬网的URL列表(本教程将以Wikipedia URL为例)
  • 用于处理网页以提取信息的parse()方法
import scrapyclass spider1(scrapy.Spider): name = 'Wikipedia' start_urls = ['https://en.*********.org/wiki/Battery_(electricity)'] def parse(self, resp***e): pass

快速测试,确保一切正常运行。

scrapy runspider spider1.py# prints2017-11-23 09:09:21 [scrapy.utils.log] INFO: Scrapy 1.4.0 started (bot: scrapybot)2017-11-23 09:09:21 [scrapy.utils.log] INFO: Overridden settings: {'SPIDER_LOADER_WARN_ONLY': True}2017-11-23 09:09:21 [scrapy.middleware] INFO: Enabled extensi***:['scrapy.extensi***.memusage.MemoryUsage', 'scrapy.extensi***.logstats.LogStats',...

关闭日志记录

使用该类运行Scrapy将打印当前对您没有帮助的日志信息。让我们通过删除这些多余的日志信息来简化它。通过在文件开头添加代码来使用警告语句。

import logginglogging.getLogger('scrapy').setLevel(logging.WARNING)

现在,当您再次运行脚本时,将不会打印日志信息。

使用chrome inspector

网页上的所有内容都存储在HTML元素中。元素排列在文档对象模型(DOM)中。了解DOM对于充分利用web爬虫至关重要。网络爬虫搜索页面上的所有HTML元素以查找信息,因此了解它们的排列方式非常重要。

Google Chrome有一些工具可以帮助你更快地找到HTML元素。您可以使用inspector查找web页面上看到的任何元素的HTML。

  • 导航到Chrome中的页面
  • 将鼠标放在要查看的图元上
  • 单击鼠标右键,然后从菜单中选择“检查”

这些步骤将在选中元素选项卡的情况下打开开发人员控制台。在控制台的底部,您将看到一个元素树。此树是获取脚本信息的方式。

提取标题

让我们用剧本为我们做些工作;获取网页标题文本的简单爬网。

通过向提取标题的parse()方法添加一些代码来启动脚本。

... def parse(self, resp***e): print resp***e.css('h1#firstHeading::text').extract()...

resp***e参数支持一个名为CSS()的方法,该方法使用您提供的位置从页面中选择元素。

在本例中,元素为h1.firstHeading。添加

::text

对于脚本来说,是元素的文本内容。最后,extract()方法返回所选元素。

在Scrapy中运行此脚本将以文本形式打印标题。

[u'Battery (electricity)']

查找描述

现在我们已经抓取了标题文本,让我们对脚本做更多的工作。爬虫将找到标题后的第一段并提取此信息。

以下是Chrome开发者控制台中的元素树:

div#mw-content-text>div>p

右箭头(>)表示元素之间的父子关系。

该位置将返回所有匹配的p元素,其中包括整个描述。要获取第一个p元素,可以编写以下代码:

resp***e.css('div#mw-content-text>div>p')[0]

就像标题一样,您添加了CSS提取器

::text

获取元素的文本内容。

resp***e.css('div#mw-content-text>div>p')[0].css('::text')

最后一个表达式使用extract()返回列表。完成所有爬网后,可以使用Python join()函数加入列表。

def parse(self, resp***e): print ''.join(resp***e.css('div#mw-content-text>div>p')[0].css('::text').extract())

结果是文本的第一段!

An electric battery is a device c***isting of one or more electrochemical cells with external connecti*** provided to power electrical devices such as flashlights, **artphones, and electric cars.[1] When a battery is supplying electric power, its positive terminal is...

收集json数据

Scrapy可以以文本形式提取信息,这很有用。Scrapy还允许您查看数据JavaScript对象表示法(JSON)。JSON是一种组织信息的简洁方式,广泛应用于web开发中。JSON与Python的配合也非常好。

当需要以JSON的形式收集数据时,可以使用Scrapy中内置的yield语句。

下面是使用yield语句的脚本的新版本。这将获取所有p元素并以JSON格式组织它,而不是以文本格式获取第一个p元素。

... def parse(self, resp***e): for e in resp***e.css('div#mw-content-text>div>p'): yield { 'para' : ''.join(e.css('::text').extract()).strip() }...

现在可以通过指定输出JSON文件来运行spider:

scrapy runspider spider3.py -o joe.json

脚本现在将打印所有p元素。

[{"para": "An electric battery is a device c***isting of one or more electrochemical cells with external connecti*** provided to power electrical devices such as flashlights, **artphones, and electric cars.[1] When a battery is supplying electric power, its positive terminal is the cathode and its negative terminal is the anode.[2] The terminal marked negative is the source of electr*** that when connected to an external circuit will flow and deliver energy to an external device. When a battery is connected to an external circuit, electrolytes are able to move as i*** within, allowing the chemical reacti*** to be completed at the separate terminals and so deliver energy to the external circuit. It is the movement of those i*** within the battery which allows current to flow out of the battery to perform work.[3] Historically the term \"battery\" specifically referred to a device composed of multiple cells, however the usage has evolved additionally to include devices composed of a single cell.[4]"},{"para": "Primary (single-use or \"disposable\") batteries are used once and discarded; the electrode materials are irreversibly changed during discharge. Common examples are the alkaline battery used for flashlights and a multitude of portable electronic devices. Secondary (rechargeable) batteries can be discharged and recharged multiple...

删除多个元素

到目前为止,网络爬虫已经从页面中抓取了标题和一种元素。Scrapy还可以在一个脚本中从不同类型的元素中提取信息。

让我们为一个周末摘取IMDb的票房冠军。此信息来自http://www.imdb.com/chart/boxoffice,在一个表中,每个度量都有行。

parse()方法可以从行中提取多个字段。使用Chrome Developer工具,您可以找到嵌套在表中的元素。

... def parse(self, resp***e): for e in resp***e.css('div#boxoffice>table>tbody>tr'): yield { 'title': ''.join(e.css('td.titleColumn>a::text').extract()).strip(), 'weekend': ''.join(e.css('td.ratingColumn')[0].css('::text').extract()).strip(), 'gross': ''.join(e.css('td.ratingColumn')[1].css('span.secondaryInfo::text').extract()).strip(), 'weeks': ''.join(e.css('td.weeksColumn::text').extract()).strip(), 'image': e.css('td.posterColumn img::attr(src)').extract_first(), }...

图像选择器指定img是td.posterColumn的后代。要提取正确的属性,请使用表达式::attr(src)。

运行spider返回JSON:

[{"gross": "$93.8M", "weeks": "1", "weekend": "$93.8M", "image": "https://images-na.ssl-images-amazon.com/images/M/MV5BYWVhZjZkYTItOGIwYS00NmRkLWJlYjctMWM0ZjFmMDU4ZjEzXkEyXkFqcGdeQXVyMTMxODk2OTU@._V1_UY67_CR0,0,45,67_AL_.jpg", "title": "Justice League"},{"gross": "$27.5M", "weeks": "1", "weekend": "$27.5M", "image": "https://images-na.ssl-images-amazon.com/images/M/MV5BYjFhOWY0OTgtNDkzMC00YWJkLTk1NGEtYWUxNjhmMmQ5ZjYyXkEyXkFqcGdeQXVyMjMxOTE0ODA@._V1_UX45_CR0,0,45,67_AL_.jpg", "title": "Wonder"},{"gross": "$247.3M", "weeks": "3", "weekend": "$21.7M", "image": "https://images-na.ssl-images-amazon.com/images/M/MV5BMjMyNDkzMzI1OF5BMl5BanBnXkFtZTgwODcxODg5MjI@._V1_UY67_CR0,0,45,67_AL_.jpg", "title": "Thor: Ragnarok"},...]

更多网络爬虫和机器人

Scrapy是一个详细的库,它可以执行您要求的任何类型的web爬行。当涉及到在HTML元素中查找信息时,再加上Python的支持,很难击败它。无论你是在构建一个网络爬虫,还是在学习网络抓取的基础知识,唯一的限制是你愿意学习多少。

如果您正在寻找更多的方法来构建爬虫程序或机器人程序,您可以尝试使用Python构建Twitter和Instagram机器人程序。Python可以在web开发中构建一些惊人的东西,因此在探索这种语言时,值得超越web爬虫。

Subscribe to our newsletter

Join our newsletter for tech tips, reviews, free ebooks, and exclusive deals!

Click here to subscribe

  • 发表于 2021-08-07 06:53
  • 阅读 ( 234 )
  • 分类:编程

你可能感兴趣的文章

如何用selenium制作网络爬虫

... 为了本文的目的,让我们研究一下如何从java读取googlemail。虽然Google确实提供了一个API(应用程序编程接口)来读取邮件,但在本文中,我们使用Selenium与googlemail交互来演示这个过程。googlemail大量使用javasc...

  • 发布于 2021-03-11 23:41
  • 阅读 ( 371 )

搜索引擎是如何工作的?

... 但是一个网站是如何被爬网的呢?一个自动化的机器人(称为“蜘蛛”)尽可能快地访问一页又一页,使用页面链接找到下一步要去的地方。即使在早期,谷歌的蜘蛛每秒也能阅读几百页...

  • 发布于 2021-03-12 13:31
  • 阅读 ( 171 )

如何正确设置机器人.txt为您的网站

... 我们来看看机器人.txt文件是什么,它做什么,以及如何正确设置它为您的网站。 ...

  • 发布于 2021-03-13 06:21
  • 阅读 ( 235 )

如何建立一个独特的网站没有代码使用wix

如果你现在经营任何一种业务,那么你就需要一个网站——即使你的业务不是在网上进行的。网站不仅使你的生意在顾客和/或客户眼中合法化,它还为他们提供了一种在第一时间找到你生意的方法。 ...

  • 发布于 2021-03-13 12:21
  • 阅读 ( 241 )

如何使用chrome上的wayback机器查看死url链接

你可能听说过互联网档案。它是网络上所有数字作品的尘封之地。它不是坟墓,而是构成我们数字体验的知识宝库。 ...

  • 发布于 2021-03-16 05:21
  • 阅读 ( 149 )

如何将android设备转变成web服务器

...可以用Android智能**或平板电脑来管理你的网页。下面介绍如何构建一个简单的Android web服务器。 ...

  • 发布于 2021-03-21 14:54
  • 阅读 ( 264 )

什么是刮网?如何从网站收集数据

... 浏览器如何获取web数据? ...

  • 发布于 2021-03-22 00:36
  • 阅读 ( 221 )

ipapi如何帮助您构建更智能的网站

... 让我们看看ipapi做了什么,它提供了什么,以及您现在如何免费开始。 ...

  • 发布于 2021-03-22 21:55
  • 阅读 ( 176 )

5种发现你可能喜欢的youtube新频道或用户的方法

... 频道爬虫应该是YouTube在自己网站上构建的东西。该网站已经索引了超过60万个YouTube频道,使之成为一个简单的工具,让你可以轻松地过滤频道。 ...

  • 发布于 2021-03-24 08:47
  • 阅读 ( 317 )

最好的网上刮网工具

...户友好的web scraper之一。它还有易于理解的文档,指导您如何使用该工具。 ...

  • 发布于 2021-03-28 12:12
  • 阅读 ( 234 )
esxmbt428
esxmbt428

0 篇文章

相关推荐