抓取网页数据违法吗( 网页上极为简单的抓取范例,你知道几个?)

优采云 发布时间: 2021-10-30 16:18

  抓取网页数据违法吗(

网页上极为简单的抓取范例,你知道几个?)

  从网络获取数据

  您是否尝试过各种方法,但仍然没有得到您需要的数据?可能有时候你在网页上找到了你需要的数据,但是上面没有下载按钮,复制粘贴功能也没有。别着急,这里有一些实用的方法,例如你可以:

  借助这些强大的技术功能,不要忘记简单易用的方法:花时间搜索机器可读的数据,或致电持有您需要的数据的组织,可能会帮助您获得所需的信息. 数据。

  在本节中,我们将展示一个非常简单的从 HTML 页面抓取的示例。

  什么是机器可读数据?

  大多数方法的目的是获取机器可读的数据。生成机器可读数据是为了方便计算机处理,而不是为了向人类用户显示。这些数据的结构与其内容有关,但与数据的最终呈现方式不同。简单的机器可读数据格式包括 CSV、XML、JSON 和 Excel 文档等,而 Word 文档、HTML 网页和 PDF 文档更侧重于数据的可视化呈现。PDF 是一种与打印机交互的语言。它记录的信息不是字母,而是页面上线条和点的位置。

  从网络上抓取什么?

  大家都做过这样的事情:你在某个网站上浏览时发现了一个有趣的表格,你想把它复制到Excel中进行计算或存储。但是有时候这个方法行不通,有时候你需要的数据分布在几个网站页面上。手动复制粘贴太繁琐,用一点代码就能事半功倍。

  网络抓取的一大优势是它几乎可以用于所有网站,无论是天气预报还是政府预算。即使网站没有提供原创数据访问的API接口,你仍然可以抓住它。

  网络抓取的限制

  爬行不是万能的,会遇到障碍。导致网页难以抓取的主要因素有:

  另一方面,法律限制也可能成为障碍。部分国际承认对数据库的权利,这将限制您在 Internet 上重复使用公开发布的信息。有时,您可以忽略这些法律规定并继续爬行。这取决于您所在位置的司法管辖区。如果你是记者,会有一些特别的便利。抓取免费的政府数据通常没问题,但您应该在发布前再次检查。商业组织和一些非政府组织对数据抓取几乎零容忍。他们会指责你“破坏”了他们的系统。其他可能侵犯个人隐私的数据将违反数据隐私法,也有悖于职业道德。

  打补丁、抓取、编译、清理

  英国面临的挑战不是公开数据,而是以可用的形式提供数据。比如接待外事、议员外部利益、游说等数据,都是定期、定期公布的,但很难分析。

  对于一些有价值的信息,只能很费力地将许多excel文件拼凑起来,每个文件都由大量的报告数据组成,例如内阁会议。但是对于其他信息,网络抓取是一种非常有效的方式。

  使用类似于 ScraperWiki 的服务,要求程序员制作一个程序,例如抓取会员的兴趣注册表。我们的工作已经完成了一半:所有成员的信息都在一个表格中,等待我们分析和整理。

  类似的服务(或类似于Outwit Hub)对于那些在尝试处理复杂数据时不知道如何编程的记者来说是一个很好的帮手。

  ——詹姆斯·鲍尔,《卫报》

  履带式

  有很多程序可以用来从网站中提取大量信息,包括浏览器扩展和一些网络服务。可读性(从网页中抓取文本)和 DownThemAll(批量下载文件)工具可以在某些浏览器上自动处理繁琐的任务。Chrome浏览器的Scraper插件可以从网站中提取表格。开发者扩展FireBug(针对火狐浏览器,Chrome、Safari和IE都内置了类似的功能)可以让你清楚地了解网站的结构以及浏览器和服务器之间的通信。

  ScraperWiki网站 提供Python、Ruby、PHP等多种语言供用户编写自己的爬虫代码。这使得用户不再需要在本地安装语言环境来编码进行爬虫工作。此外,还有 Google 电子表格和 Yahoo! 等网络服务。管道还提供从其他 网站 中提取内容的服务。

  网络爬虫是如何工作的?

  网页抓取工具通常用 Python、Ruby 或 PHP 编写成一小段程序代码。您选择的具体语言取决于您的环境。如果您所在新闻机构的某个人或同一城市的同事开始使用某种语言写作,您最好使用同一种语言。

  虽然前面提到的点击选择工具可以帮助您入门,但真正复杂的步骤是确定正确的页面和页面上的正确元素来存储所需信息。这些步骤的关键不是编程,而是理解网站和数据库结构。

  浏览器在显示网页时主要使用以下两种技术:通过HTTP协议与服务器通信,请求指定的文档、图片、视频等资源;然后获取HTML代码编写的网页内容。

  网页结构

  每个 HTML 网页都是由具有一定结构级别(由 HTML“标签”定义)的“框”构成的。大“盒子”将收录小“盒子”,就像表格中有行、列和单元格一样。不同的标签有不同的功能。您可以定义“框”、表格、图片或超链接。标签还具有附加属性(例如唯一标识符),并且可以在“类”中定义,这使我们可以轻松定位和检索文档中的各个元素。编写爬虫的核心是选择合适的元素来获取对应的内容。

  查看网页元素时,所有代码都可以按照“框”进行划分。

  在开始抓取网页之前,您需要了解 HTML 文档中出现的元素类型。例如,形成了一个表格,其中定义了行并将行细分为单元格。最常见的元素类型是

  ,简单来说,它可以定义任何内容区域。识别这些元素的最简单方法是使用浏览器上的开发人员工具。当鼠标悬停在网页的特定区域时,这些工具会自动显示该区域对应的代码。

  标签就像一本书的封面,告诉你哪里是起点,哪里是终点。表示文字从这里_斜体显示,表示斜体到这里结束。多么容易!

  示例:使用 Python 捕获核事件

  国际原子能机构(IAEA)门户网站网站上的新闻栏目记录了世界各地的放射性事故(栏目名称正在申请加入“奇怪的标题*敏*感*词*”)。该网页易于使用,并具有类似博客的结构,便于抓取。

  

  图4.国际原子能机构(IAEA)门户网站()

  首先,在 ScraperWiki 上创建一个 Python 爬虫,然后你会看到一个基本空白的文本框,里面有一些基本的框架代码。同时在另一个窗口打开IAEA网站,打开浏览器的开发者工具。在“元素”视图下,找到每个新闻标题对应的 HTML 元素,开发者工具会明确指出定义标题的代码。

  进一步观察可以发现,标题是用+定义的。每个事件都有一个单独的 ++ 行,其中收录事件的描述和日期。为了获取所有事件的标题,我们应该使用某种方法依次选择表格中的每一行,然后获取标题元素中的文本。

  要将这些过程写成代码,我们需要指定具体的步骤。我们来玩个小游戏,体验一下什么是步骤。在 ScraperWiki 界面中,先试着给自己写一些指引,你想通过代码完成什么工作,就像菜谱中的流程(在每行开头写一个“#”来告诉 Python 这行不是计算机代码)。例如:

  # 寻找表格中的所有行

# 不要让独角兽在左侧溢出(注:IT冷笑话)

  编写时尽可能准确,不要假设程序真的理解你想要捕捉的内容。

  写了几行伪代码后,我们来看一下真​​实代码的前几行:

  import scraperwiki

from lxml import html

  在第一段中,我们从库中调用现有函数(预先编写的代码片段)。ScraperWiki在这个代码段中提供了下载网站的功能,+lxml+是一个HTML文档结构分析的工具。好消息,在 ScraperWiki 中编写 Python 爬虫,前两行是一样的。

  url = "http://www-news.iaea.org/EventList.aspx"

doc_text = scraperwiki.scrape(url)

doc = html.fromstring(doc_text)

  然后,代码定义了变量名:url,其值为IAEA的网页地址。这行告诉爬虫,有这样的事情,我们需要对他做点什么。注意这个URL URL 是用引号括起来的,说明这不是一段代码,而是一个_string_,一个字符序列。

  然后我们把这个 URL 变量放到一个指令中,scraperwiki.scrape。此命令将执行定义的操作:下载网页。这项工作完成后,会执行指令将内容输出到另一个变量doc_text,然后将网页的文本存储在doc_text中。但是这个文本不是你在浏览器中看到的。它以源代码形式存储并收录所有标签。由于这些代码不易解析,我们使用另一个命令html.fromstring 生成一个特殊的格式,方便我们对元素进行分析。这种格式称为文档对象模型 (DOM)。

  for row in doc.cssselect("#tblEvents tr"):

link_in_header = row.cssselect("h4 a").pop()

event_title = link_in_header.text

print event_title

  最后一步,我们使用DOM来搜索表格中的每一行,获取事件的头部,获取标题。这里有两个新想法:for 循环和元素选择器 (.cssselect)。for 循环的工作非常简单。它遍历项目列表,为每个项目分配一个别名(在本段中,每行+行+),然后对每个项目执行一次指令的缩进部分。

  另一个概念元素选择器,是指使用特定的语言来查找文档中的元素。CSS 选择器通常用于向 HTML 元素添加布局信息,我们可以使用它来准确地在页面上定位元素。在这段代码的第 6 行,我们使用 #tblEvents tr 来选择标签中选择器 ID 为 tblEvents(ID 需要用“#”标记)的所有行。此代码将返回符合条件的元素列表。

  然后在第 7 行,我们使用另一个选择器在标签(标题)中查找标签(超链接)。这里我们一次只找到一个元素(因为一行只有一个标题),所以找到之后需要通过.pop()命令输出。

  请注意,DOM 中的某些元素收录实际文本,即非编程语言中的文本。对于这些文本,我们在第 8 行使用 [element].text 命令。最后,在第 9 行,我们将结果输出到 ScraperWiki 控制台。完成后,只需在爬虫中点击“运行”,小窗口中就会一一列出IAEA网站上的事件名称。

  

  图5. 爬虫在行动(ScraperWiki)

  现在一个基本的爬虫正在运行。它将下载网页,将其转换为 DOM 格式,然后您可以从中选择并获取特定内容。在这个框架下,可以尝试使用ScraperWiki和Python的帮助文档来解决剩下的问题:

  在尝试解决这些问题的同时,您还可以浏览 ScraperWiki。网站很多现成的爬虫工具都有实际案例,数据也很有用。这样,您就不需要从头开始编写代码。使用类似的案例对代码进行更改,然后部署到您自己的问题。

  — 弗里德里希·林登伯格,开放知识基金会

  抓取公共数据集

  例如,一些法国物理学家开发了一种免费招标方式,这样你就可以选择支付不低于 70 欧元和不超过 500 欧元的费用来获得 30 分钟的肿瘤科医生使用时间。这些数据的速率是合法公开的,但管理员提供了一个难以定位的在线数据库。为了找到一个好的角度来看待这些关税,我决定爬取整个世界报的数据库。

  乐趣才刚刚开始。前端的搜索表单最初是一个 Flash 应用程序,它通过 POST 请求重定向到 HTML 结果页面。在 Nicolas Kayser-Bril 的帮助下,我们花了很多时间才终于发现,这个应用程序在搜索表单和结果页面中还调用了另一个“隐藏”页面。这个页面其实是存储了搜索表单的cookie值,然后傲然进入结果页面。本来这应该是一个很难理解的过程,但是PHP下这个cURL库中的设置帮助我们轻松地克服了这个障碍。其实,只要找出障碍在哪里,就可以轻松解决。最后,我们总共花了 10 个小时爬下整个数据库,但非常值得。

  — 亚历山大·莱切内,《世界报》

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线