Изстържете уебсайт с този красив урок за Python за супа

Изстържете уебсайт с този красив урок за Python за супа

Beautiful Soup е библиотека на Python с отворен код. Той използва навигационни анализатори, за да изстърже съдържанието на XML и HTML файлове. Имате нужда от данни за няколко аналитични цели. Въпреки това, ако сте нов в Python и уеб изстъргването, библиотеката на красивата супа на Python си струва да изпробвате за проект за остъргване в мрежата.





С библиотеката Beautiful Soup с отворен код на Python можете да получите данни, като изстържете всяка част или елемент от уеб страница с максимален контрол върху процеса. В тази статия разглеждаме как можете да използвате красива супа, за да изстържете уебсайт.





Как да инсталирате красива супа и да започнете с нея

Преди да продължим, в тази статия за красива супа ще използваме Python 3 и beautifulsoup4 , най -новата версия на Beautiful Soup. Уверете се, че вие създайте виртуална среда на Python за да изолирате вашия проект и неговите пакети от тези на вашата локална машина.





iphone 6 началният бутон не работи

За да започнете, трябва да инсталирате библиотеката Beautiful Soup във вашата виртуална среда. Beautiful Soup се предлага като пакет PyPi за всички операционни системи, така че можете да го инсталирате с pip install beautifulsoup4 команда чрез терминала.

Ако обаче използвате Debian или Linux, горната команда все още работи, но можете да я инсталирате с мениджъра на пакети, като стартирате apt-get инсталирайте python3-bs4 .



Красивата супа не изстъргва директно URL адресите. Работи само с готови HTML или XML файлове. Това означава, че не можете да предадете URL адрес директно в него. За да разрешите този проблем, трябва да получите URL адреса на целевия уебсайт с библиотеката на заявките на Python, преди да го подадете на Beautiful Soup.

За да направите тази библиотека достъпна за вашия скрепер, стартирайте заявки за инсталиране на pip команда чрез терминала.





За да използвате библиотеката за парсинг на XML, стартирайте pip install lxml да го инсталирате.

Проверете уеб страницата, която искате да изстържете

Преди да изстържете всеки уебсайт, с който не сте запознати, най -добрата практика е да проверите елементите му. Можете да направите това, като превключите браузъра си в режим на програмист. Доста лесно е да използвайте Chrome DevTools ако използвате Google Chrome.





Необходимо е обаче да проверите уеб страница, за да научите повече за нейните HTML тагове, атрибути, класове и идентификатори. Това разкрива основните елементи на уеб страницата и нейните типове съдържание.

Той също така ви помага да разработите най -добрите стратегии, които можете да използвате, за да получите точните данни, които искате от уебсайт, и как можете да ги получите.

Как да изстържете данните на уебсайтове с красива супа

Сега, когато имате всичко готово, отворете предпочитан редактор на код и създайте нов Python файл, като му дадете избрано име. Можете обаче и вие използвайте уеб базирани IDE като Jupyter Notebook ако не сте запознати с изпълнението на Python чрез командния ред.

След това импортирайте необходимите библиотеки:

from bs4 import BeautifulSoup
import requests

Първо, нека да видим как работи библиотеката с искания:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com')
print(website)

Когато стартирате кода по -горе, той връща състояние 200, което показва, че заявката ви е успешна. В противен случай получавате статус 400 или някои други състояния на грешка, които показват неуспешна GET заявка.

Не забравяйте винаги да заменяте URL адреса на уебсайта в скобите с целевия си URL адрес.

След като получите уебсайта с вземете след това го прехвърляте в Beautiful Soup, който вече може да чете съдържанието като HTML или XML файлове, като използва вградения си XML или HTML анализатор, в зависимост от избрания от вас формат.

Разгледайте този следващ фрагмент от код, за да видите как да направите това с HTML анализатора:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com')
soup = BeautifulSoup(website.content, 'html.parser')
print(soup)

Горният код връща целия DOM на уеб страница с нейното съдържание.

Можете също да получите по -подравнена версия на DOM, като използвате разкрасявам метод. Можете да опитате това, за да видите изхода му:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
print(soup.prettify())

Можете също така да получите чисто съдържание на уеб страница, без да зареждате елемента й с .текст метод:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
print(soup.text)

Как да изстържете съдържанието на уеб страница по името на етикета

Можете също така да изстържете съдържанието в определен маркер с Beautiful Soup. За да направите това, трябва да включите името на целевия маркер във вашата заявка за скрепер за Beautiful Soup.

Например, нека да видим как можете да получите съдържанието в h2 тагове на уеб страница.

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
print(soup.h2)

В кодовия фрагмент по -горе, супа.h2 връща първия h2 елемент на уеб страницата и игнорира останалата част. За да заредите всички h2 елементи, можете да използвате find_all вградена функция и за цикъл на Python:

най -добрите приложения за редактиране на видео за android
from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
h2tags = soup.find_all('h2')
for soups in h2tags:
print(soups)

Този блок код връща всичко h2 елементи и тяхното съдържание. Можете обаче да получите съдържанието, без да зареждате маркера, като използвате .низа метод:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
h2tags = soup.find_all('h2')
for soups in h2tags:
print(soups.string)

Можете да използвате този метод за всеки HTML маркер. Всичко, което трябва да направите, е да замените h2 маркирайте с този, който харесвате.

Можете обаче да изстържете още тагове, като предадете списък с тагове в find_all метод. Например блокът от код по -долу изстъргва съдържанието на да се , h2 , и заглавие тагове:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
tags = soup.find_all(['a', 'h2', 'title'])
for soups in tags:
print(soups.string)

Как да изстържете уеб страница с помощта на ID и име на клас

След като проверите уебсайт с DevTools, той ви позволява да знаете повече за атрибутите id и class, съдържащи всеки елемент в неговия DOM. След като разполагате с тази информация, можете да изстържете тази уеб страница, като използвате този метод. Полезно е, когато съдържанието на целевия компонент излиза от базата данни.

Можете да използвате намирам метод за скреперите за идентификатор и клас. За разлика от find_all метод, който връща итерируем обект, намирам метод работи върху единична, неитерируема цел, която е документ за самоличност в такъв случай. Така че, не е нужно да използвате за цикъл с него.

Нека разгледаме пример за това как можете да изстържете съдържанието на страница по -долу, като използвате идентификатора:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
id = soup.find(id = 'enter the target id here')
print(id.text)

За да направите това за име на клас, заменете документ за самоличност с клас . Писането обаче клас директно води до объркване в синтаксиса, тъй като Python го вижда като ключова дума. За да заобиколите тази грешка, трябва да напишете долна черта пред класа по следния начин: клас_ .

По същество редът, съдържащ идентификатора, става:

my_classes = soup.find(class_ = 'enter the target class name here')
print(my_classes.text)

Можете обаче да изстържете уеб страница, като извикате име на определен маркер със съответния му идентификатор или клас:

data = soup.find_all('div', class_ = 'enter the target class name here')
print(data)

Как да си направим скрепер за многократна употреба с красива супа

Можете да създадете клас и да съберете целия предишен код във функция в този клас, за да направите скрепер за многократна употреба, който получава съдържанието на някои тагове и техните идентификатори. Можем да направим това, като създадем функция, която приема пет аргумента: URL адрес, две имена на етикети и съответните им идентификатори или класове.

Да предположим, че искате да надраскате цените на ризи от уебсайт за електронна търговия. Примерният клас скрепер по -долу извлича етикетите за цена и риза със съответните им идентификатори или класове и след това го връща като рамка от данни на Pandas с „Цена“ и Shirt_name като имена на колони.

Уверете се, че вие pip install pandas чрез терминала, ако вече не сте го направили.

import pandas as pd
class scrapeit:
try:
def scrape(website=None, tag1=None, id1=None, tag2=None, id2=None):
if not (website and tag1 and id1 and tag2 and id2)==None:
try:
page = requests.get(website)
soup = BeautifulSoup(page.content, 'html.parser')
infotag1 = soup.find_all(tag1, id1)
infotag2 = soup.find_all(tag2, id2)
priced = [prices.text for prices in infotag1]
shirt = [shirts.text for shirts in infotag2]
data = {
'Price':priced,
'Shirt_name':shirt}
info = pd.DataFrame(data, columns=['Price', 'Shirt_name'])
print(info)
except:
print('Not successful')
else:
print('Oops! Please enter a website, two tags and thier corresponding ids')
except:
print('Not successful!')

Стъргалото, което току -що направихте, е модул за многократна употреба и можете да го импортирате и използвате в друг Python файл. За да се обадите на изстъргвам функция от своя клас, който използвате scrapeit.scrape ('URL адрес на уебсайт', 'маркер_цена', 'цена_идентификатор', 'етикет на риза', 'риза_идентификатор') . Ако не предоставите URL адреса и други параметри, файлът иначе изявление ви подканва да го направите.

За да използвате този скейпър в друг Python файл, можете да го импортирате така:

from scraper_module import scrapeit
scrapeit.scrape('URL', 'price_tag', 'price_id', 'shirt_tag', 'shirt_id')

Забележка: scraper_module е името на Python файла, съдържащ скреперния клас.

Можете също да проверите Красива документация за супа ако искате да се потопите по -дълбоко в това как можете да го използвате по най -добрия начин.

Красивата супа е ценен инструмент за изстъргване в мрежата

Beautiful Soup е мощен скрепер за екран на Python, който ви дава контрол върху това как преминават данните ви по време на изстъргването. Това е ценен бизнес инструмент, тъй като може да ви даде достъп до уеб данните на конкурентите, като ценообразуване, пазарни тенденции и др.

как да изтриете касово приложение

Въпреки че в тази статия сме направили скрепер за тагове, все пак можете да играете с тази мощна библиотека на Python, за да направите по -полезни инструменти за изстъргване.

Дял Дял Туит електронна поща Най -добрите онлайн инструменти за изстъргване онлайн

Трябва да събирате данни от уебсайтове за аналитични цели? Тези инструменти за изстъргване на уеб го правят лесно.

Прочетете Напред
Свързани теми
  • Програмиране
  • Python
За автора Идису Омисола(94 статии са публикувани)

Idowu е страстен за всичко умно технология и производителност. В свободното си време той играе с кодиране и превключва на шахматната дъска, когато му е скучно, но също така обича да се откъсва от рутината от време на време. Страстта му да показва на хората пътя около съвременните технологии го мотивира да пише повече.

Още от Idowu Omisola

Абонирайте се за нашия бюлетин

Присъединете се към нашия бюлетин за технически съвети, рецензии, безплатни електронни книги и изключителни оферти!

Щракнете тук, за да се абонирате