开发手册 欢迎您!
软件开发者资料库

Python Web Scraping - 数据提取

Python Web Scraping数据提取 - 从简单和简单的步骤学习Python Web Scraping,从基本到高级概念,包括简介,Python入门,用于Web Scraping的Python模块,Web Scraping的合法性,数据提取,数据处理,处理图像和视频,处理文本,刮动态网站,基于刮痧表格的网站,处理CAPTCHA,使用刮板进行测试。

分析网页意味着理解其结构.现在,问题出现了为什么它对网络抓取很重要?在本章中,让我们详细了解这一点.

网页分析

网页分析很重要因为没有分析我们无法知道我们将以何种形式从提取后的网页(结构化或非结构化)接收数据.我们可以通过以下方式进行网页分析 :

查看页面来源

这是一种了解网页结构的方法检查其源代码.要实现此目的,我们需要右键单击该页面,然后必须选择查看页面源选项.然后,我们将以HTML的形式从该网页获取我们感兴趣的数据.但主要关注的是我们难以格式化的空格和格式.

通过点击Inspect Element Option检查页面来源

这是另一个分析网页的方式.但不同的是,它将解决网页源代码中的格式和空格问题.您可以通过右键单击然后从菜单中选择检查检查元素选项来实现此目的.它将提供有关该网页的特定区域或元素的信息.

从网页提取数据的不同方法

以下方法主要是用于从网页中提取数据 :

正则表达式

它们是嵌入在Python中的高度专业化的编程语言.我们可以通过Python的 re 模块使用它.它也被称为RE或正则表达式或正则表达式模式.在正则表达式的帮助下,我们可以为数据中可能匹配的字符串指定一些规则.

如果你想了解更多关于正则表达式的信息,请去到链接 https://www.it1352.comhttps://www.tutorialspoint.com/automata_theory/regular_expressions.htm 如果你想更多地了解Python中的re模块或正则表达式,你可以按照链接https://www.it1352.comhttps://www.tutorialspoint.com/python/python_reg_expressions.htm .

示例

在下面的例子中,我们将从
中抓取关于印度的数据 http://example.webscraping.com 在正则表达式的帮助下.

import reimport urllib.requestresponse =   urllib.request.urlopen('http://example.webscraping.com/places/default/view/India-102')html = response.read()text = html.decode()re.findall('(.*?)',text)

输出

相应的输出将如下所示 :

[   '',   '3,287,590 square kilometres',   '1,173,108,018',   'IN',   'India',   'New Delhi',   'AS',   '.in',   'INR',   'Rupee',   '91',   '######',   '^(\\d{6})$',   'enIN,hi,bn,te,mr,ta,ur,gu,kn,ml,or,pa,as,bh,sat,ks,ne,sd,kok,doi,mni,sit,sa,fr,lus,inc',   '
      CN       NP       MM       BT       PK       BD    
']

请注意,在上面的输出中,您可以通过常规查看有关印度国家/地区的详细信息表达.

美丽的汤

假设我们想从网页收集所有超链接,那么我们可以使用名为BeautifulSoup的解析器,它可以是在 https://www.crummy.com/software/BeautifulSoup/bs4/doc/.中详细了解.简单来说,BeautifulSoup是一个Python库,用于从HTML和XML文件中提取数据.它可以与请求一起使用,因为它需要输入(文档或URL)来创建汤对象,因为它无法自己获取网页.您可以使用以下Python脚本来收集网页和超链接的标题.

安装美丽的汤

使用 pip 命令,我们可以在我们的虚拟环境或全局安装中安装 beautifulsoup .

(base) D:\ProgramData>pip install bs4Collecting bs4   Downloadinghttps://files.pythonhosted.org/packages/10/ed/7e8b97591f6f456174139ec089c769f89a94a1a4025fe967691de971f314/bs4-0.0.1.tar.gzRequirement already satisfied: beautifulsoup4 in d:\programdata\lib\sitepackages(from bs4) (4.6.0)Building wheels for collected packages: bs4   Running setup.py bdist_wheel for bs4 ... done   Stored in directory:C:\Users\gaurav\AppData\Local\pip\Cache\wheels\a0\b0\b2\4f80b9456b87abedbc0bf2d52235414c3467d8889be38dd472Successfully built bs4Installing collected packages: bs4Successfully installed bs4-0.0.1

示例

请注意例如,我们正在扩展上面用请求python模块实现的示例.我们正在使用 r.text 创建一个汤对象,该对象将进一步用于获取网页标题等详细信息.

首先,我们需要导入必要的Python模块 :

import requestsfrom bs4 import BeautifulSoup

在下面这行代码中,我们使用请求为url发出GET HTTP请求: https://authoraditiagarwal.com/发出GET请求.

 r = requests.get(' https://authoraditiagarwal.com/')

现在我们需要创建一个Soup对象,如下所示 :

  soup = BeautifulSoup(r.text,'lxml') print(soup.title) print(soup.title.text)

输出

相应的输出将如下所示 :

Learn and Grow with Aditi AgarwalLearn and Grow with Aditi Agarwal

Lxml

我们将要讨论的另一个Python库刮是lxml.它是一个高性能的HTML和XML解析库.它相对快速和直接.您可以在 https://lxml.de/上阅读更多内容.

安装lxml

使用pip命令,我们可以在虚拟环境或全局安装中安装 lxml .

(base) D:\ProgramData>pip install lxmlCollecting lxml   Downloadinghttps://files.pythonhosted.org/packages/b9/55/bcc78c70e8ba30f51b5495eb0e3e949aa06e4a2de55b3de53dc9fa9653fa/lxml-4.2.5-cp36-cp36m-win_amd64.whl(3.6MB)   100% |¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 3.6MB 64kB/sInstalling collected packages: lxmlSuccessfully installed lxml-4.2.5

示例:使用lxml进行数据提取和请求

在以下示例中,我们使用lxml和requests :

$从 authoraditiagarwal.com 抓取网页的特定元素b $ b

首先,我们需要从lxml库导入请求和html,如下所示 :

import requestsfrom lxml import html

现在我们需要提供废弃的网页网址

  url = 'https://authoraditiagarwal.com/leadershipmanagement/'

现在我们需要提供路径(Xpath)到该网页的特定元素 :

path = '//*[@id="panel-836-0-0-1"]/div/div/p[1]'response = requests.get(url)byte_string = response.contentsource_code = html.fromstring(byte_string)tree = source_code.xpath(path)print(tree[0].text_content())

输出

相应的输出将如下所示 :

The Sprint Burndown or the Iteration Burndown chart is a powerful tool to communicatedaily progress to the stakeholders. It tracks the completion of work for a given sprintor an iteration. The horizontal axis represents the days within a Sprint. The vertical axis represents the hours remaining to complete the committed work.