ciemne logo proxyscrape

Web Scraping, wyrażenia regularne i wizualizacja danych - wszystko w Pythonie

Python, Scraping, 02 listopada 2022 r.5 minut czytania

Web scraping can be defined as the method of collecting and restructuring data from websites. It can also be defined as the programmatic approach of obtaining website data in an automated manner. For instance, you want to extract the email IDs of all people who commented on a Facebook post. You can do this by

Spis treści

Web scraping można zdefiniować jako metodę gromadzenia i restrukturyzacji danych ze stron internetowych. Można go również zdefiniować jako programowe podejście do uzyskiwania danych ze stron internetowych w sposób zautomatyzowany. Na przykład, chcesz wyodrębnić identyfikatory e-mail wszystkich osób, które skomentowały post na Facebooku. Można to zrobić na dwa sposoby. Po pierwsze, możesz skierować kursor na ciąg adresu e-mail dowolnej osoby. Następnie można go skopiować i wkleić do pliku. Ta metoda jest znana jako ręczne skrobanie. Ale co, jeśli chcesz zebrać 2000 identyfikatorów e-mail? Za pomocą narzędzia do skrobania stron internetowych można wyodrębnić wszystkie identyfikatory e-mail w ciągu 30 sekund zamiast 3 godzin w przypadku ręcznego skrobania.

Do pozyskiwania informacji ze stron internetowych można użyć narzędzi do web scrapingu. Wystarczy tylko wiedzieć, jak klikać, a wiedza programistyczna nie jest wymagana. Narzędzia te oszczędzają zasoby, czas i koszty. Możesz zeskrobać miliony stron w zależności od potrzeb, nie martwiąc się o przepustowość sieci. Niektóre strony internetowe wdrażają anty-boty, które zniechęcają scraperów do zbierania danych. Jednak dobre narzędzia do skrobania stron internetowych mają wbudowane funkcje pozwalające ominąć te narzędzia i zapewnić płynne skrobanie.

Web Scraping w Pythonie

Python posiada doskonałe narzędzia do pobierania danych z sieci. Przykładowo, można zaimportować bibliotekę requests w celu pobrania treści ze strony internetowej i bs4(BeautifulSoup) w celu wyodrębnienia odpowiednich informacji. Możesz wykonać poniższe kroki, aby skrobać strony internetowe w Pythonie. Będziemy wyodrębniać informacje z tej strony internetowej. 

Żądania importu:

Musisz zaimportować bibliotekę żądań, aby pobrać HTML strony internetowej. 

żądania importu

Żądanie GET:

Musisz wykonać żądanie GET do strony internetowej. Można to zrobić, wklejając adres URL do funkcji requests.get().

r = requests.get('http://www.cleveland.com/metro/index.ssf/2017/12/case_western_reserve_university_president_barbara_snyders_base_salary_and_bonus_pay_tops_among_private_colleges_in_ohio.html')

Wyodrębnij zawartość:

Wyodrębnij zawartość strony internetowej za pomocą r.content. Daje to zawartość strony internetowej w bajtach. 

c = r.content

Import BeautifulSoup:

Należy zaimportować bibliotekę BeautifulSoup, ponieważ ułatwia ona pobieranie informacji ze stron internetowych.

z bs4 import BeautifulSoup

Utwórz obiekt zupy:

Musisz utworzyć obiekt BeautifulSoup z treści i przeanalizować go za pomocą kilku metod.

soup = BeautifulSoup(c)
print(soup.get_text())

Dane wyjściowe (to tylko część) będą wyglądać mniej więcej tak.

Wyodrębnij przydatne dane:

Musimy znaleźć odpowiednie selektory CSS, aby wyodrębnić pożądane dane. Możemy znaleźć główną treść na stronie internetowej za pomocą metody .find() obiektu soup.

main_content = soup.find('div', attrs = {'class': 'entry-content'})

Użyj atrybutu .text:

Możemy pobrać informacje jako tekst z tabeli za pomocą atrybutu.text zupy.

content = main_content.find('ul').text
print(content)

Pobraliśmy tekst tabeli jako ciąg znaków. Ale informacje te będą bardzo przydatne, jeśli wyodrębnimy określone części ciągu tekstowego. Aby wykonać to zadanie, musimy przejść do wyrażeń regularnych.

Wyrażenia regularne w Pythonie

Wyrażenia regularne(RegEx) to sekwencja wzorców, które definiują wzorzec wyszukiwania. Podstawową ideą jest to, że:

  • Zdefiniuj wzorzec, który chcesz dopasować w ciągu tekstowym. 
  • Przeszukuje ciąg znaków pod kątem zwracanych dopasowań.

Załóżmy, że chcemy wyodrębnić następujące informacje z tabeli tekstowej.

  • Wynagrodzenia
  • Nazwy szkół wyższych
  • Nazwiska prezydentów

Możesz wyodrębnić te trzy informacje, wykonując czynności wymienione poniżej.

Krok 01:

Zaimportuj re i aby wyodrębnić pensje, musisz utworzyć wzorzec pensji. Użyj metody re.compile (), aby skompilować wzorzec wyrażenia regularnego dostarczony jako ciąg znaków do obiektu wzorca RegEx. Ponadto można użyć pattern.findall (), aby znaleźć wszystkie dopasowania i zwrócić je jako listę ciągów. Każdy ciąg będzie reprezentował jedno dopasowanie.

import re
salary_pattern = re.compile(r'\$.+')
salaries = salary_pattern.findall(content)

Krok 02:

Powtórz tę samą procedurę, aby wyodrębnić nazwy uczelni. Utwórz wzór i wyodrębnij nazwy. 

school_pattern = re.compile(r'(?:,|,\s)([A-Z]{1}.*?)(?:\s\(|:|,)')
schools = school_pattern.findall(content)
print(schools)
print(salaries)

Krok 03:

Powtórz tę samą procedurę, aby wyodrębnić nazwiska prezydentów. Utwórz wzór i wyodrębnij wymagane nazwiska. 

name_pattern = re.compile(r'^([A-Z]{1}.+?)(?:,)', flags = re.M)
names = name_pattern.findall(content)
print(names)

Krok 04:

Wynagrodzenia wyglądają niechlujnie i nie są zrozumiałe. Używamy więc rozumienia listy Pythona do konwersji wynagrodzeń łańcuchowych na liczby. Aby osiągnąć pożądane rezultaty, użyjemy cięcia łańcuchów, dzielenia i łączenia oraz rozumienia listy.

salaries = ['$876,001', '$543,903', '$2453,896']
[int(''.join(s[1:].split(',')) for s in salaries]

Wynik jest następujący:

Wizualizacja danych w Pythonie

Wizualizacja danych pomaga zrozumieć dane wizualnie, dzięki czemu można ujawnić trendy, wzorce i korelacje. Możesz przełożyć dużą ilość danych na wykresy, diagramy i inne wizualizacje, aby zidentyfikować wartości odstające i uzyskać cenne informacje.

Możemy użyć matplotlib do wizualizacji danych, jak pokazano poniżej.

Zaimportuj niezbędne biblioteki, jak pokazano poniżej.

import pandas as pd
import matplotlib.pyplot as plt

Utwórz ramkę danych pandas zawierającą szkoły, nazwiska i pensje. Na przykład można przekonwertować szkoły na ramkę danych jako:

df_school = pd.DataFrame(schools)
print(df_school)

Wynik to:

Podobnie można postąpić w przypadku wynagrodzeń i nazwisk.

W celu wizualizacji danych możemy wykreślić wykres słupkowy, jak pokazano poniżej.

df.plot(kind='barh', x = 'President', y = 'salary')

Wynik jest następujący:

Dlaczego serwery proxy są potrzebne do skrobania stron internetowych?

Skrobanie stron internetowych pomaga firmom wydobywać przydatne informacje na temat spostrzeżeń rynkowych i branż, aby oferować usługi oparte na danych i podejmować decyzje oparte na danych. Serwery proxy są niezbędne do skutecznego skrobania danych z różnych stron internetowych z następujących powodów.

  • Unikanie zakazów IP - Aby powstrzymać skrobaki przed wykonywaniem zbyt wielu żądań, witryny biznesowe ograniczają ilość danych, które można indeksować, określanych jako współczynnik indeksowania. Szybkość indeksowania spowalnia szybkość witryny i utrudnia użytkownikowi skuteczny dostęp do żądanych treści. Jeśli jednak użyjesz wystarczającej puli serwerów proxy do skrobania danych, ominiesz limity szybkości na docelowej stronie internetowej. Wynika to z faktu, że serwery proxy wysyłają żądania z różnych adresów IP, umożliwiając w ten sposób wyodrębnianie danych ze stron internetowych zgodnie z wymaganiami.
  • Umożliwienie dostępu do treści specyficznych dla regionu - Firmy muszą monitorować swoich konkurentów (strony internetowe) w celu zapewnienia odpowiednich funkcji produktów i cen klientom w określonym regionie geograficznym. Mogą uzyskać dostęp do wszystkich treści dostępnych w tym regionie za pomocą serwerów proxy z adresami IP.
  • Zwiększone bezpieczeństwo - serwer proxy dodaje dodatkową warstwę zabezpieczeń, ukrywając adres IP urządzenia użytkownika.

Czy wiesz, ilu pełnomocników potrzebujesz, aby uzyskać powyższe korzyści? Możesz obliczyć wymaganą liczbę pełnomocników za pomocą tego wzoru:

Liczba serwerów proxy = Liczba żądań dostępu / Współczynnik indeksowania

Liczba żądań dostępu zależy od następujących parametrów.

  • Częstotliwość, z jaką scraper pobiera informacje ze strony internetowej
  • Liczba stron, które użytkownik chce zeskrobać

Z drugiej strony, szybkość indeksowania jest ograniczona liczbą żądań wykonanych przez użytkownika w określonym czasie. Niektóre witryny zezwalają na ograniczoną liczbę żądań na użytkownika w celu rozróżnienia żądań automatycznych i ludzkich. 

Korzystanie z serwerów proxy w Pythonie

Możesz używać serwerów proxy w Pythonie, wykonując poniższe kroki.

  • Musisz zaimportować moduł żądań Pythona.
żądania importu
  • Można utworzyć pulę serwerów proxy w celu ich rotacji.
proxy = 'http://114.121.248.251:8080'
url = 'https://ipecho.net/plain'
  • Możesz użyć requests.get(), aby wysłać żądanie GET, przekazując proxy jako parametr do adresu URL.
page = requests.get(url,
                    proxies={"http": proxy, "https": proxy})
  • Jeśli nie wystąpił błąd połączenia, można uzyskać zawartość żądanego adresu URL.
wydruk(page.text)

Wynik jest następujący:

Wnioski

Rozmawialiśmy o tym, że możemy użyć web scrapingu do wyodrębniania danych ze stron internetowych zamiast ręcznego scrapingu. Web scraping jest opłacalnym i oszczędzającym czas procesem. Firmy wykorzystują go do gromadzenia i restrukturyzacji informacji internetowych w celu podejmowania decyzji opartych na danych i uzyskiwania cennych informacji. Korzystanie z serwerów proxy jest niezbędne do bezpiecznego skrobania stron internetowych, ponieważ ukrywa oryginalny adres IP użytkownika przed docelową stroną internetową. Do skrobania stron internetowych można używać serwerów proxy dla centrów danych lub serwerów proxy dla użytkowników indywidualnych. Preferujemy jednak korzystanie z domowych serwerów proxy, ponieważ są one szybkie i nie można ich łatwo wykryć. Co więcej, możemy używać wyrażeń regularnych w Pythonie do dopasowywania lub znajdowania zestawów ciągów znaków. Oznacza to, że możemy wyodrębnić dowolny wzorzec ciągu z tekstu za pomocą wyrażeń regularnych. Widzieliśmy również, że wizualizacja danych przekształca ogromne ilości danych w wykresy, grafy i inne wizualizacje, które pomagają nam wykrywać anomalie i identyfikować przydatne trendy w danych.