BeautifulSoup 객체에 대한 의사록

Introduction


계기.


최근 복제인 개발이 시작됐지만, 너무 열심히 하지 않아 뷰티풀 수프4의 공식 문서(일본어 번역)를 주시하고 있다.BeautifulSoup과 검색하면 대부분의 사용법이 인기를 끌 것이다.그러나 실용적으로 사용하려면 너무 자질구레해서 응용할 수 없다...orz가 실제로 복제하고 싶은 사이트는 샘플 HTML와 달리 매우 깊다
그래서 이번에 쳐다보면서 얻은 지식과 잊고 싶지 않은 것들 등을 최대한 간단하고 알기 쉽게 비망록으로 정리하고 싶습니다.

요약


BeautifulSoup은 select나find를 통해 요소를 지정할 수 있지만 BeautifulSoup의 규칙에서 추출한 요소의 대상은 확정적이기 때문에bs4입니다.element.스케줄러:대상인지 아닌지 판단할 필요가 있지!모든 대상의 사용 방법은 고정되어 있기 때문에 어떻게 지정해야 어떤 대상이 될지 알면 매우 편리합니다!라는 내용을 담았다.

스크레이퍼는 합법적입니까?


예전웹 페이지 복제에 관한 글에 이렇게 썼어요.
Cf.) 웹 덮어쓰기 관련 고려 사항
사이트 축소판 그림에도 기재되어 있으니 전면적으로 인용할 수 있도록 허락해 주십시오.
나가사키 시립 중앙도서관 사건 - 위키백과
웹 덮어쓰기 고려 사항 요약
오사키 시립 중앙도서관 사건(Libraick 사건)-위키백과에 관해서는 쉽게 화가 나지 않아 불안할 수밖에 없다.

BeautifulSoup4 참조 정보


일본어 번역판
오늘의 Semple은 대부분의 시간을 이 페이지와 개발 페이지 사이를 오가기만 한다.
스크레이퍼 - Beautiful Soup의 DOM 트리 액세스 방법 요약
내가 공식 문서의 예시를 몰랐을 때, 나는 이 페이지를 보았다.
Python과 Beautiful Soup으로 롤업을 진행합니다.
BeautifulSoup4 사용법에 당혹스러울 때 참고하였습니다.

롤업 참조 정보


또 커튼을 설치할 때 지나치게 배려를 받았다는 보도도 아래에 실릴 예정이다.감사합니다.
입문류 문장에 없는 실천/현장 파이썬 스크링 방식(2019년 최신)
커튼 기술에 대한 상세한 설명이 있어 이해하기 쉽다.

자기 소개



자기 소개 페이지
環境情報
Python 3.6.5 |Anaconda, Inc.|
Windows10

대상


• Python 3 시스템을 사용하는 사용자 (Anaconda를 통해 설치)
・홈페이지를 덮은 초보자의 털 성장 수준 (필자도 이 수준)
• BeautifulSoup의 문법 구조를 잘 모르는 사람
• 1 을 듣고 10 을 이해하는 엔지니어
Windows 사용자

대상자


• Python 2 시스템을 사용하는 사용자
• 인터넷 장식에 뛰어난 사람
• 세레니움만으로도 충분한 사람
• 설명을 잘 못하는 필자를 공격하는 엔지니어
Mac의 사람
파이톤2계와 파이톤3계의 뜻을 모르시는 분들께!
파이썬은 2학과와 3학과가 있는데, 최근 시작한 사람들은 대체로 파이썬 3학과다.먼저 판본을 확인하는 방법을 기재해 주세요.
명령 프롬프트에서 Python의 상호 작용 모드를 시작하면 버전 정보가 표시됩니다.
$ Python
>Python 3.6.5 |Anaconda, Inc.| (default, Mar 29 2018, 13:32:41) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
상호작용 모드를 종료하려면 exit () 를 입력하십시오!

Let's Start


BeautifulSoup을 사용하면 HTML에서 요소를 추출할 수 있습니다.
간단한 사용법 참고이 페이지 몇 가지를 소개합니다.
이번 보도도 기본적으로 점퍼 노트북에서 이뤄졌다.
from bs4 import BeautifulSoup


html = """
<html>
<head>
    <title>レストランメニュー</title>
</head>
<body>
    <h1>本日の<b>おすすめ</b>メニュー</h1>
    <ul class="restaurant_menu">
        <li>あじの塩焼き</li>
        <li>海鮮<i>チャーハン</i></li>
    </ul>
    <p>メニューは日替わりです。</p>
    <hr>
    <p>サンプル画像</p>
    <p>
        <img src="sample.png" alt="サンプル画像"></p>
    <p>お気に入りに<a href="sample.com">Web site</a>を登録してください。</p>
</body>
</html>
"""

soup = BeautifulSoup(html, 'lxml')
그럼 이제 드디어 이번 주제네요.
BeautifulSoup 객체 정보
HTML 파일을 쓴 적이 있는 사람들은 Beautiful Soup은 다음과 같은 대상으로 정의되어 있음을 대충 알 수 있다.다음과 같이 기술하다.
bs4.element.Tag
#コード内に含まれる<>で囲まれているタグ部分です。
#基本的な文法を使うことができるBeautifulSoupといえばのオブジェクトです。

bs4.element.NavigatableString
#コード内に含まれる文字列などのTagで囲まれた部分です。

bs4.element.Comment
#コード内に含まれるコメントアウトされた部分です。

bs4.BeautifulSoup
#上記の3つの上位概念という感じでしょうか? 
BeautifulSoup 객체에 대해서는 뜻을 잘 몰라서 생략합니다.소개를 해도 별로 실용적이지 않은데... 그냥 혼자 안 쓰는 거예요?
더 자세히 알고 싶은 사람 이쪽.
(일본어)
(영어)
type()에서 객체 유형을 찾을 수 있습니다.
print(soup.find("title").string)
#'レストランメニュー'

print(type(soup.find("title").string))
#bs4.element.NavigatableString
나는 대상에 대해 하나하나 보고 싶다.
그럼에도 불구하고 실제로는 Tag 대상만 설명했다

Tag 객체


Tag 객체에서 요소를 추출하는 방법으로는'select()','find()','find all()'등이 있습니다.
"select(")는 CSS 선택기에서 지정한 값을 가져옵니다.
"find ("는 탭에서 지정한 값을 앞에서 얻을 수 있습니다.
"find all (") 는 탭에서 지정한 모든 값을 목록 형식으로 가져올 수 있습니다.
cf) CSS 선택기의 사용 방법에 대해서는 이쪽 글→Python 웹 덮어쓰기 기술 집합 "얻을 수 없는 값이 없습니다" 자바스크립트 대응@ 추가 설명 6/12을 보십시오.
당장 3가지 수법으로 전갱이 소금구이를 구해오자.
print(soup.select("ul.restaurant_menu > li")[0])
print(soup.find("li"))
print(soup.find_all("li")[0])

#3つとも <li>あじの塩焼き</li> が取得できます。
각 객체의 유형은 다음과 같습니다.
print(type(soup.select("ul.restaurant_menu > li")[0]))
#<class 'bs4.element.Tag'>

print(type(soup.find("li")))
#<class 'bs4.element.Tag'>

print(type(soup.find_all("li")[0]))
#<class 'bs4.element.Tag'>
'select ('와'find all () '가 여러 요소가 있을 때 목록 형식으로 출력합니다.
print(soup.select("ul.restaurant_menu > li"))
#[<li>あじの塩焼き</li>, <li>海鮮<i>チャーハン</i></li>]
print(type(soup.select("ul.restaurant_menu > li")))
#<class 'list'>

print(soup.find_all("li"))
#[<li>あじの塩焼き</li>, <li>海鮮<i>チャーハン</i></li>]
print(type(soup.find_all("li"))
#<class 'list'>
어떤 수법이든'bs4.element.Tag'로 출력할 수 있기 때문에 더욱find()와findall()로 깊이 파헤칠 수 있습니다.
목록으로 출력하면 깊이 파헤칠 수 없으니 주의해야 한다.
나는 이렇게 해도 해결할 수 없는 상황이 있다고 생각한다. 만약 의문이 있다면, 나는 각양각색의 상황에서 다시 보충할 것이다!
실제 커튼과 샘플 코드는 크게 다르네요!

Navigatable String 객체


bs4.element.tag로 둘러싸인 문자열을 나타내는 대상입니다.
print(soup.select("ul.restaurant_menu > li")[0].string)
print(soup.find("li").string)
print(soup.find_all("li")[0].string)

#3つとも あじの塩焼き が取得できます。

print(type(soup.select("ul.restaurant_menu > li")[0].string))
print(type(soup.find("li").string))
print(type(soup.find_all("li")[0].string))
#<class 'bs4.element.NavigableString'>
물론 문자열은 더 이상 깊이 파고들 수 없고'find'(find) 등을 사용해도 오류가 발생할 뿐이다.

공통 대상


논평 대상에 관해서는 논평된 부분이기 때문에 이 관점을 복제하는 데 특별한 가치가 없다고 생각합니다.
문서도 별로 접촉되지 않았다.1

마지막으로...


대부분의 사람들2은 이 기사가 별 의미가 없다고 생각하지만, 아무래도 자신의'메모'로 쓴 것이기 때문에 계란 같은 건 버리지 마세요.3
전혀 갈피를 못 잡고 하루를 보내다 보니 같은 머리를 가진 사람을 위해 쓴 거라고 생각했어요.참고가 됐으면 좋겠어요.

기타 사이트


https://qiita.com/itkr/items/513318a9b5b92bd56185
https://www.dataquest.io/blog/web-scraping-tutorial-python/
http://www.seleniumqref.com/api/python/window_get/Python_page_source.html
https://gammasoft.jp/blog/use-diffence-str-and-repr-python/
문서에 언급되지 않았기 때문에, 물론 일본어 번역판도 언급되지 않았다. 
문서를 읽을 수 있는 사람에게는 문서만으로도 충분하고 초보자에게는 또 다른 좋은 문장이 있다. 
계란뿐만 아니라 버려지는 것도 싫어요. 

좋은 웹페이지 즐겨찾기