Beautiful Soup과 함께 놀아요.
23635 단어 scrapingpythonbeautifulsoup
원하는 작업을 캡처하고, 글을 캡처하고, 내용 집합기를 만들고, 필요한 물건을 전자메일로 보내고, 파일에 저장할 수 있다.선택의 여지가 많다.
다만 당신이 삭제하고 있는 사이트를 존중하고 삭제에 관한 정책을 점검해야 한다.
요구 사항:
Python, BeautifulSoup4, 요청.
교육용으로 사용할 URL입니다.Creator 는 스크래치 기술을 연습하는 데 사용할 수 있다고 스스로 말했다.
http://books.toscrape.com/
장치
스크랩에 사용할 코드를 작성할 python 파일을 만듭니다. 스크랩에 이름을 붙일 것입니다.피야.
여느 때와 마찬가지로, 우리는 pip를 사용하여 요청과 미화 SOUP4 모듈을 설치합니다.
venv 활성화 터미널에 들어가서 다음을 입력하십시오.
pip install requests beautifulsoup4
요청 모듈은 웹 페이지에 요청을 보내고 응답을 볼 수 있도록 도와줍니다.BeautifulSoup은 필요한 데이터를 수집하고 필터하는 데 도움을 줄 것입니다.
우리 시작하자.
먼저 요청 모듈을 사용하여 URL에 액세스합니다.
scraper.py
import requests
page = requests.get("http://books.toscrape.com/")
print(page)
스크립트를 실행하면 다음과 같은 결과를 얻을 수 있습니다.<Response [200]>
이것은 우리가 URL에 접근했음을 알려 줍니다. (상태 코드 200==OK)이제 BeautifulSoup을 사용합니다.
편집
scraper.py
파일:import requests
from bs4 import BeautifulSoup
page = requests.get("http://books.toscrape.com/")
soup = BeautifulSoup(page.content, "html.parser")
print(soup)
print(soup.prettify())
우리는 이미 soup 실례를 만들었다.다음은 우리가 무엇을 보고 있는지, 어디서 데이터를 수집하는지 보고 싶다.
이를 위해 다음과 같은 두 가지 옵션이 있습니다.
1. 터미널에 수프 인스턴스 인쇄
우리가
soup
변수를 인쇄할 때, 우리는 우리가 방문하고 있는 페이지의 html 코드를 얻을 것이다.나는 두 개의 인쇄 결과 옵션 ((
print(soup)
과 print(soup.prettify()
을 썼다.차이점은 우리가 인쇄
soup
자체를 하면 보기 흉하고 혼란스러운 코드를 얻을 수 있다는 것이다.만약 우리가
prettify()
를 사용한다면 우리는 깨끗한 html
코드를 얻을 것이다.2. DevTools 사용
나는 두 번째 선택을 더 좋아한다.
브라우저에서 스크래치할 URL을 열면 마우스 오른쪽 버튼으로 클릭하고
Inspect
를 선택합니다.DevTools
가 나타납니다.Elements
옵션을 선택하고 페이지를 다시 로드합니다.페이지의 html
코드를 Elements
부분에 표시합니다.이것이 바로 당신이 찾는 유형입니다.`
모든 제품 | 긁을 책 - 샌드박스
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<meta name="created" content="24th Jun 2016 09:29" />
<meta name="description" content="" />
<meta name="viewport" content="width=device-width" />
<meta name="robots" content="NOARCHIVE,NOCACHE" />...
`현재, 만약 당신이 이전에 사용한 적이 없다면, 간단명료한 연구를 해 보세요. 이것은 결코 복잡하지 않습니다.
잡기 편리하도록 우리는 라벨, ID, 클래스 등 기초 지식을 이해해야 우리가 필요로 하는 것을 얻을 수 있다.
구걸 중에는
html
자체를 익히는 데 더 많은 시간이 필요하다.하지만...다른 일과 마찬가지로, 그것은 연습에 따라 더욱 좋아질 것이다.우리 닦자.
우리가 하고 싶은 것은 책의 제목, 책값을 얻고, 이 책이 판매되었는지 검사하는 것이다.
우선, 우리가 잡고 싶은 내용이 있는
html
라벨을 보고 싶습니다.연구
html
후에 우리는 html
라벨을 주의할 수 있다.더 정확히 말하면 <article>
라벨에 <article>
가 달려 있다.이 특정한 라벨은 우리가 필요로 하는 책 이름, 가격, 도서의 획득 가능성을 포함한다.
모든 책의 정보는
class=”product_pod”
의<article>
라벨로 포장되어 있다.우리는 자신의 목표가 있다. 모든 목표를 하나의 변수에 놓아서 더 쉽게 삭제할 수 있도록 하기만 하면 된다.
class="product_pod"
파일에 다음 행을 추가합니다.results = soup.find_all("article", class_="product_pod")
우리의 scraper.py
실례에서 우리는 soup
가 있는 모든 <article>
표시를 찾아 class="product_pod"
변수에 저장하고 있다.우리가 인쇄할 때
results
, 우리는 비슷한 목록의 변수를 얻을 수 있다.이제
results
의 원소가 어떤 모양인지 살펴보자. 그러면 우리는 어떻게 해야 할지 알 수 있다.파일에 다음 내용을 추가하고 스크립트를 실행합니다.
result = results[0]
print(result)
터미널:<article class="product_pod">
<div class="image_container">
<a href="catalogue/a-light-in-the-attic_1000/index.html"><img alt="A Light in the Attic" class="thumbnail" src="media/cache/2c/da/2cdad67c44b002e7ead0cc35693c0e8b.jpg"/></a>
</div>
<p class="star-rating Three">
<i class="icon-star"></i>
<i class="icon-star"></i>
<i class="icon-star"></i>
<i class="icon-star"></i>
<i class="icon-star"></i>
</p>
<h3><a href="catalogue/a-light-in-the-attic_1000/index.html" title="A Light in the Attic">A Light in the ...</a></h3>
<div class="product_price">
<p class="price_color">£51.77</p>
<p class="instock availability">
<i class="icon-ok"></i>
In stock
</p>
<form>
<button class="btn btn-primary btn-block" data-loading-text="Adding..." type="submit">Add to basket</button>
</form>
</div>
</article>
현재 우리는 단지 하나의 결과만 인쇄했다. results
탭과 우리가 원하는 제목을 포함하는 것을 보았다.그 밖에 우리는
<h3>
라벨이 있는 <p>
라벨을 볼 수 있다. 이 책의 가격을 포함하고 class="price_color"
라벨이 있는 <p>
라벨이 있는데 이 책이 재고가 있는지 없는지를 알려준다.지금 우리는 우리가 필요로 하는 정보를 방문할 것이다.
class="instock availability"
변수에서 데이터를 추출합니다. 이 변수는 한 권의 책과 관련된 데이터만 포함합니다. (잠시 후 캡처 중인 페이지의 모든 책에 대해 이 동작을 진행할 것입니다.)책 이름
파일에 추가하기
title_element = result.find(“h3”)
인쇄result
를 하면 다음과 같은 정보가 제공됩니다.<h3><a href="catalogue/a-light-in-the-attic_1000/index.html" title="A Light in the Attic">A Light in the ...</a></h3>
보시다시피 전체 제목은 title_element
라벨에 있습니다.제목 자체에 접근해야 합니다. 방문<a>
에 있는 <a>
에 제목 자체를 표시하고 검색해야 합니다.파일에 추가하기title = title_element.find("a")["title"]
title_element
이제 다락방에 있는 등불을 드리겠습니다.우리는 서명 문제를 해결했다.
대가
우리는 가격이
print(title)
라벨과 <p>
로 포장된 것을 보았다.파일에 다음을 추가합니다.price_element = result.find("p", class_="price_color")
인쇄class="price_color"
를 하면 다음과 같은 결과를 얻을 수 있습니다.<p class="price_color">£51.77</p>
탭에서 텍스트를 가져오고 간격이 있는 텍스트를 지워야 합니다.파일에 다음 행을 추가합니다.price = price_element.text.strip()
우리가 가격을 인쇄할 때, 우리는 양식이 좋은 문자열 price_element
을 얻을 것이다.이 책의 가득성
이 책의 가격과 마찬가지로 우리도 이 책을 살 수 있다.추가:
availability_element = result.find("p", class_="instock availability")
이 결과는 다음과 같습니다.<p class="instock availability">
<i class="icon-ok"></i>
In stock
</p>
이제 다음을 추가하여 결과를 정리합니다.available = available_element.text.strip()
이것은 우리에게 문자열 '재고' 를 제공할 것이다.알겠습니다. 책 이름, 가격, 가용성을 어떻게 얻는지 알고 있습니다.
마지막 코드
£51.77
변수는 처음부터 유사한 목록의 변수이기 때문에 우리는 순환하는 모든 책(결과의 모든 결과)에 대해 이 동작을 수행할 수 있다.코드를 조금 수정하고 for 순환을 추가해서 목록에 있는 책의 정보를 출력합시다.파일을 다음과 같이 변경합니다.
import requests
from bs4 import BeautifulSoup
page = requests.get("http://books.toscrape.com/")
soup = BeautifulSoup(page.content, "html.parser")
results = soup.find_all("article", class_="product_pod")
for result in results:
# looping through results and storing the values to a separate variables.
# the book title.
title_element = result.find("h3")
title = title_element.find("a")["title"]
# the price of the book.
price_element = result.find("p", class_="price_color")
price = price_element.text.strip()
# availability of the book
available_element = result.find("p", class_="instock availability")
available = available_element.text.strip()
print(f"The book title is: {title}.")
print(f"The book price: {price}.")
print(f"The book is: {available}.\n")
스크립트를 실행하면 터미널에서 다음과 같은 결과를 얻을 수 있습니다.The book title is: A Light in the Attic.
The book price: £51.77.
The book is: In stock.
The book title is: Tipping the Velvet.
The book price: £53.74.
The book is: In stock.
The book title is: Soumission.
The book price: £50.10.
The book is: In stock.
...
...
...
The book title is: Libertarianism for Beginners.
The book price: £51.33.
The book is: In stock.
The book title is: It's Only the Himalayas.
The book price: £45.17.
The book is: In stock.
저기 있다.스크래치 자체가 그리 어려운 것은 아니지만, 단지 약간의 연습이 필요할 뿐이다.
그 밖에 다른 방식으로 완성할 수 있다. 이것은 당신이 무엇을 필요로 하고 무엇을 좋아하느냐에 달려 있다.
누군가가 이 문장이 매우 도움이 된다고 생각하길 바란다.
Reference
이 문제에 관하여(Beautiful Soup과 함께 놀아요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/joks84/playing-with-beautifulsoup-spiders-might-not-be-so-scary-after-all-4o81텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)