Python 웹 스크랩 핑-데이터 추출

웹 페이지를 분석한다는 것은 그 구조를 이해하는 것을 의미합니다. 이제 웹 스크래핑에 왜 중요한지 의문이 생깁니다. 이 장에서는 이것을 자세히 이해합시다.

웹 페이지 분석

웹 페이지 분석은 분석 없이는 추출 후 해당 웹 페이지에서 데이터를받을 형식 (구조화 또는 비 구조화)을 알 수 없기 때문에 중요합니다. 우리는 다음과 같은 방법으로 웹 페이지 분석을 할 수 있습니다.

페이지 소스보기

이것은 소스 코드를 검사하여 웹 페이지가 어떻게 구성되는지 이해하는 방법입니다. 이를 구현하려면 페이지를 마우스 오른쪽 버튼으로 클릭 한 다음View page source선택권. 그런 다음 해당 웹 페이지에서 관심있는 데이터를 HTML 형식으로 가져옵니다. 그러나 주요 관심사는 우리가 서식을 지정하기 어려운 공백과 서식에 관한 것입니다.

요소 검사 옵션을 클릭하여 페이지 소스 검사

이것은 웹 페이지를 분석하는 또 다른 방법입니다. 그러나 차이점은 웹 페이지의 소스 코드에서 서식 및 공백 문제를 해결한다는 것입니다. 마우스 오른쪽 버튼을 클릭 한 다음Inspect 또는 Inspect element메뉴에서 옵션. 해당 웹 페이지의 특정 영역 또는 요소에 대한 정보를 제공합니다.

웹 페이지에서 데이터를 추출하는 다양한 방법

다음 방법은 주로 웹 페이지에서 데이터를 추출하는 데 사용됩니다-

정규식

그들은 Python에 포함 된 고도로 전문화 된 프로그래밍 언어입니다. 우리는 그것을 통해 사용할 수 있습니다re파이썬 모듈. RE 또는 regexes 또는 regex 패턴이라고도합니다. 정규식의 도움으로 데이터에서 일치시킬 가능한 문자열 세트에 대한 몇 가지 규칙을 지정할 수 있습니다.

일반적인 정규식에 대해 자세히 알아 보려면 링크로 이동하십시오. https://www.tutorialspoint.com/automata_theory/regular_expressions.htm그리고 파이썬의 re 모듈이나 정규 표현식에 대해 더 알고 싶다면 https://www.tutorialspoint.com/python/python_reg_expressions.htm 링크를 따라갈 수 있습니다 .

다음 예에서는 인도에 대한 데이터를 http://example.webscraping.com 정규 표현식의 도움으로 <td>의 내용을 일치시킨 후.

import re
import urllib.request
response =
   urllib.request.urlopen('http://example.webscraping.com/places/default/view/India-102')
html = response.read()
text = html.decode()
re.findall('<td class="w2p_fw">(.*?)</td>',text)

산출

해당 출력은 다음과 같습니다.

[
   '<img src="/places/static/images/flags/in.png" />',
   '3,287,590 square kilometres',
   '1,173,108,018',
   'IN',
   'India',
   'New Delhi',
   '<a href="/places/default/continent/AS">AS</a>',
   '.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',
   '<div>
      <a href="/places/default/iso/CN">CN </a>
      <a href="/places/default/iso/NP">NP </a>
      <a href="/places/default/iso/MM">MM </a>
      <a href="/places/default/iso/BT">BT </a>
      <a href="/places/default/iso/PK">PK </a>
      <a href="/places/default/iso/BD">BD </a>
   </div>'
]

위 출력에서 ​​정규 표현식을 사용하여 인도 국가에 대한 세부 정보를 볼 수 있습니다.

아름다운 수프

웹 페이지에서 모든 하이퍼 링크를 수집하고 싶다면 BeautifulSoup이라는 파서를 사용할 수 있습니다. https://www.crummy.com/software/BeautifulSoup/bs4/doc/.간단히 말해서 BeautifulSoup은 HTML 및 XML 파일에서 데이터를 가져 오기위한 Python 라이브러리입니다. 자체적으로 웹 페이지를 가져올 수 없기 때문에 수프 객체를 생성하려면 입력 (문서 또는 URL)이 필요하기 때문에 요청과 함께 사용할 수 있습니다. 다음 Python 스크립트를 사용하여 웹 페이지 및 하이퍼 링크의 제목을 수집 할 수 있습니다.

아름다운 수프 설치

사용 pip 명령, 우리는 설치할 수 있습니다 beautifulsoup 가상 환경 또는 글로벌 설치에서.

(base) D:\ProgramData>pip install bs4
Collecting bs4
   Downloading
https://files.pythonhosted.org/packages/10/ed/7e8b97591f6f456174139ec089c769f89
a94a1a4025fe967691de971f314/bs4-0.0.1.tar.gz
Requirement 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\4f80b9456b87abedbc0bf2d
52235414c3467d8889be38dd472
Successfully built bs4
Installing collected packages: bs4
Successfully installed bs4-0.0.1

이 예제에서는 requests python 모듈로 구현 된 위의 예제를 확장하고 있습니다. 우리는 사용하고 있습니다r.text 웹 페이지 제목과 같은 세부 정보를 가져 오는 데 사용할 수프 개체를 만드는 데 사용됩니다.

먼저 필요한 Python 모듈을 가져와야합니다.

import requests
from 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)

산출

해당 출력은 다음과 같습니다.

<title>Learn and Grow with Aditi Agarwal</title>
Learn and Grow with Aditi Agarwal

Lxml

웹 스크래핑에 대해 논의 할 또 다른 Python 라이브러리는 lxml입니다. 고성능 HTML 및 XML 구문 분석 라이브러리입니다. 비교적 빠르고 간단합니다. 그것에 대해 더 읽을 수 있습니다.https://lxml.de/.

lxml 설치

pip 명령을 사용하여 다음을 설치할 수 있습니다. lxml 가상 환경 또는 글로벌 설치에서.

(base) D:\ProgramData>pip install lxml
Collecting lxml
   Downloading
https://files.pythonhosted.org/packages/b9/55/bcc78c70e8ba30f51b5495eb0e
3e949aa06e4a2de55b3de53dc9fa9653fa/lxml-4.2.5-cp36-cp36m-win_amd64.whl
(3.
6MB)
   100% |¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 3.6MB 64kB/s
Installing collected packages: lxml
Successfully installed lxml-4.2.5

예 : lxml 및 요청을 사용한 데이터 추출

다음 예에서는 웹 페이지의 특정 요소를 authoraditiagarwal.com lxml 및 요청을 사용하여-

먼저 다음과 같이 lxml 라이브러리에서 요청과 html을 가져와야합니다.

import requests
from lxml import html

이제 스크랩 할 웹 페이지의 URL을 제공해야합니다.

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

이제 경로를 제공해야합니다. (Xpath) 해당 웹 페이지의 특정 요소에-

path = '//*[@id="panel-836-0-0-1"]/div/div/p[1]'
response = requests.get(url)
byte_string = response.content
source_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 communicate
daily progress to the stakeholders. It tracks the completion of work for a given sprint
or an iteration. The horizontal axis represents the days within a Sprint. The vertical 
axis represents the hours remaining to complete the committed work.