Zephyrnet-logo

Meerdere webscraping met behulp van Beautiful Soap Library

Datum:

Dit artikel is gepubliceerd als onderdeel van het Data Science-blogathon.

Introductie

Webscraping is een benadering om inhoud en gegevens van een website te extraheren. Web Scraping maakt gebruik van intelligentie-automatiseringsmethoden om miljoenen datasets in een relatief kortere tijd te tekenen. Er zijn tal van manieren om gegevens van websites te krijgen. Enkele manieren om gegevens te verkrijgen zijn API's, online services of het helemaal opnieuw maken van een python-code. Sommige grote websites zoals Twitter, Facebook, Google enz. hebben hun eigen API's waarmee je toegang hebt tot hun gegevens in een gestructureerd formaat. Maar er zijn veel sites waarop mensen geen toegang hebben tot hun gegevens in een gestructureerd formaat. In een dergelijk scenario wordt aanbevolen om een ​​grote hoeveelheid gegevens te schrapen met behulp van webschrapen. Wanneer u vanaf nu zoekt naar code voor webschrapen, komt u code tegen die gegevens slechts van één enkele pagina schraapt.

Objectief

  1. Het doel van het artikel is om u door het proces van python-code te leiden dat automatisch de gegevens van meerdere webpagina's zal schrapen.
  2. Sentimentanalyse op de gegevens die van websites zijn geschraapt. Dit onderdeel wordt niet besproken. Alleen de code wordt aan het einde van het artikel vermeld.

Laten we erin duiken!

Stappen om geautomatiseerd webscraping uit te voeren voor Amazon.In

In deze zelfstudie heb ik webgeschraapte beoordelingen van HP 14s

Noodzakelijke bibliotheken importeren

Mooie soep is een Python-pakket voor het ontleden van HTML- en XML-documenten. Het creëert een ontleedboom voor geparseerde pagina's die kunnen worden gebruikt om gegevens uit HTML te extraheren, wat handig is voor webscraping.

randint is een functie van de willekeurige module in Python3. De toevalsmodule geeft toegang tot verschillende handige functies en een daarvan is in staat om willekeurige getallen te genereren.

# Benodigde bibliotheken importeren voor webscraping importverzoeken van bs4 import BeautifulSoup als bs van willekeurig import randint van time import sleep van itertools import repeat

Maak een lijst om de gewenste resultaten te verzamelen

name= [] cust_name = [] titels = [] review_title = [] ratings = [] rate = [] reviews =[] review_content = []

Plak de link van productrecensies

De coderegel-URL's is de regel waar u uw recensiepagina nummer 2-link moet plakken. De normale link van pagina nummer 2 zal er zo uitzien :-

Vereist formaat :

for URL in URLS: for page in range(2,11): pages = requests.get(URL + str(page)) print(URL) print(URL + str(page)) print(pages) soup = bs(pages .content,'html.parser') names = soup.find_all('span',class_='a-profile-name') name.append(names) for i in range(0,len(names)): cust_name. append(names[i].get_text()) title = soup.find_all('a',class_='review-title-content') titels.append(title) voor i in range(0,len(title)): review_title.append(title[i].get_text()) review_title[:] = [titles1.lstrip('n') voor titels1 in review_title] review_title[:] = [titles1.rstrip('n') voor titels1 in review_title ] rating = soup.find_all('i',class_='review-rating') ratings.append(rating) voor i in range(0,len(rating)): rate.append(rating[i].get_text() ) review = soup.find_all("span",{"data-hook":"review-body"}) #print("************************* ******************************") #print(review) reviews.append(review) voor i in range(0, len(review)): review_content.append(review[i].get_text()) review_content[:] = [reviews.lstrip ('n') voor recensies in review_content] review_content[:] = [reviews.rstrip('n') voor recensies in review_content] #print("Klantnamen zijn ",cust_name) print(len(cust_name)) #print( "Review Titel is ",review_title) print(len(review_title)) #print("Aantal beoordelingen zijn ",rate) print(len(rate)) #print("Actuele recensies zijn ",review_content) print(len(review_content) )

In de onderstaande afbeelding ziet u de lijst met URL's van verschillende beoordelingspagina's. — De responscode HTTP 200 OK successtatus geeft aan dat het verzoek is geslaagd. Een 503 Service Unavailable Error is een HTTP-antwoordstatuscode die aangeeft dat een server het verzoek tijdelijk niet kan verwerken. Soms kunt u de inhoud niet van alle URL's of pagina's schrapen. U moet dus doorgaan met de gegevens die zijn verzameld van de URL's waarvan het verzoek is geslaagd of het bovenstaande codeblok meerdere keren uitvoeren of vanaf verschillende systemen.

De waarden 85,60,72,90 in bovenstaande afbeelding geven een succesvolle webschraap aan van: -

Klantennamen — 85

Recensietitels — 60

Recensies — 72

Waarderingen - 90

Importeer bibliotheken die nodig zijn om het dataframe te maken

De onderstaande bcode toont de bibliotheken die nodig zijn om een ​​dataframe te maken en hoe de lijst met resultaten werd geconverteerd naar 4 verschillende dataframes en later werd samengevoegd tot een dataframe met kolommen, namelijk Klantnaam, Reviewtitel, Beoordelingen, Recensies.

De resultaat.vorm laat zien dat er 90 rijen en 4 kolommen in het dataframe zijn.

#Bibliotheken importeren die nodig zijn om het dataframe te maken. panda's importeren als pd df1 = pd.DataFrame() df1['Customer Name']=cust_name df2 = pd.DataFrame() df2['Review title']=review_title df3 = pd.DataFrame() df3['Ratings']= rate df4 = pd.DataFrame() df4['Reviews']=review_content #df['Review title']=review_title #df['Ratings']=rate #df['Reviews']=review_content #df['Mobile Model ']=modellenlijst
frames = [df1, df2, df3, df4] resultaat = pd.concat(frames,axis=1)
resultaat.vorm

(90, 4)

Beoordeling van gestructureerde gegevens in de vorm van een dataframe

resultaat.staart(10)
Web schrapen

Overal waar de code de gegevens voor beoordelingen niet kon verkrijgen, ziet u NaN geschreven.

Voor het 83e datapunt kreeg de code bijvoorbeeld een klantnaam en beoordeling, maar kon geen titel en beoordeling voor een beoordeling worden verkregen, omdat deze mogelijk niet op de website zelf stond of omdat de code deze niet kon ophalen.

Gegevens voorverwerking

Om de gegevens te analyseren met behulp van Natural Language Processing-technieken, moet u de gegevens meer gestructureerd hebben. Reinig daarom de rijen met ongeldige vermeldingen.

Eerder in stap 3 kunt u zien dat de vorm van het dataframe 90,4 was en na voorbewerking is de vorm van het dataframe 72,4. Dit betekent dat er 18 rijen waren met een null-waarde in de beoordelingskolom.

# Het aantal recensies vinden voor elk beoordelingsresultaat['Ratings'].value_counts()
#controle van de null-waarden in het resultaat van de beoordelingskolom ['Ratings'].isnull().sum()
resultaten ']) result.isnull().sum() Naam klant 18 Titel recensie 5 Waarderingen 30 Recensies 18 dtype: int0 result.shape (64, 0)

Conclusie

Op deze manier wordt geautomatiseerd webschrapen uitgevoerd om de gegevens van meerdere pagina's van een website te schrapen.

De volgende zijn de belangrijkste belangrijkste afhaalrestaurants: -

  1. U kunt alle beoordelingen van producten die op de Amazon.In-website worden vermeld, op het web schrapen.
  2. Deze code werkt voor elk product dat beschikbaar is op de website. Er zijn veel codes op de markt beschikbaar waarmee u de recensies slechts van één enkele pagina kunt schrapen.
  3. De specialiteit van de onderstaande code is dat de gebruiker de beoordelingen voor elk product en voor alle pagina's op het web kan schrapen. (bijv. Als de gebruiker Samsung S20 FE 5G zoekt en ontdekt dat er in totaal 400 beoordelingen beschikbaar zijn en verdeeld zijn over 10 pagina's, dan zal deze code alle beoordelingen van alle 10 pagina's schrapen).

Ik hoop dat deze tutorial je heeft geholpen het concept van webschrapen te begrijpen en hoe je het kunt uitvoeren om de gewenste gegevens te verkrijgen zonder hetzelfde voor meerdere pagina's te herhalen. U kunt uw feedback delen in de opmerkingen hieronder en contact met mij opnemen via Linkedin.

Lees mijn andere artikelen hier.

De in dit artikel getoonde media zijn geen eigendom van Analytics Vidhya en worden naar goeddunken van de auteur gebruikt.

spot_img

Laatste intelligentie

spot_img

Chat met ons

Hallo daar! Hoe kan ik u helpen?