Aloittelijan Web Scraping Project: Web Scraping Subreddit (vaihe vaiheelta) (2023)

Tämä artikkeli julkaistaan ​​osanaData Science Blogathon

Johdanto

Useimmat teistä saattavat tuntea sanan Web Scraping. Luulen, että useimmat teistä täällä pyrkivät datatieteilijöiksi tai datatieteen urasi alkuvaiheeseen. Joten useimmat teistä, jotka ovat tietourasi alkuvaiheessa, saattavat olla tietoisiaWeb Scrapingin merkitysjasen merkitys datan uralla.Mutta jos olet täysin aloittelija ja sinulla ei ole aiempaa tietoa tästä taidosta. Sitten sinun on aloitettava tällä johdantokurssilla (ts.Johdatus Web-kaappaukseen Pythonilla) Analytics Vidhyassa. Se on maksuton ja tarjoaa perustavanlaatuisen ja nopean johdannon Web Scrapingiin. Suosittelen, että otat sen ensin, koska tarvitset kyseisellä kurssilla esitellyt käsitteet ja käytännöt tehdäksesi tämän projektin. Kurssi toimii sinulle Web Scrapingin perustana, ja tämä projekti auttaa sinua soveltamaan sitä todellisessa maailmassa.

Ennen projektiin ryhtymistä ja hienojen juttujen tekemistä olisi normaalia kysyä (esim.Miksi sinun täytyy tehdä tällainen projekti?,taiMiksi tämä projekti, ei toinen?). Koska pelkkä verkkokaappausoppituntien seuraaminen vaihe vaiheelta ei auta sinua hallitsemaan tätä taitoa. Yhtä tärkeää on siis asettaa itsellesi tällaisia ​​haasteita testataksesi käsitystäsi kurssilla oppimistasi käsitteistä ja tehdäksesi havainnot niistä.

En pakota sinua tekemään tätä projektia, koska Internetissä on monia projekteja. Voit valita minkä tahansa niistä. Mutta aloittaminen olisi paljon helpompaa, jos olisit juuri suorittanut verkkoraapimisen johdantokurssin ja miettinyt, missä näitä käsitteitä voisi soveltaa. Se olisi kuin avautuisi verkkoraapimisen maailmalle, jos et koskaan romuttaisi mitään.

Olet valmis.

Joten aloitetaan.

Projektin läpikulku

Saatat tietää, että minkä tahansa työn tai projektin alussa on aloitetta. Joten on loogista kysyä (eli miksi rakennat tällaisen työkalun tai miksi saatat tarvita sitä?).

Harkitse tapausta, jossa et enää halua vierailla niche-subredditissäsi, vaikkapar/MachineLearning, usein uusien viestien tarkistamiseen. Jos he eivät kiinnosta sinua, se saattaa turhauttaa sinua. Pikemminkin, jos käytät tiettyä työkalua, joka voi antaa sinulle uuden viestin otsikon ja sen kuvauksen, voit tarkistaa, kannattaako mennä ja jatkaa lukemista tai keskustella muiden jäsenten kanssa. Joten se voi toimia aloitteena tälle projektille.

Koska suoritit johdantokurssin (toivottavasti), nyt saatat tietää, että ennen minkään verkkosivun indeksoimista sinun pitäisi seurata senrobots.txttiedosto. Se kertoo verkkoroboteille, mitä sivuja ei saa indeksoida.

Aloittelijan Web Scraping Project: Web Scraping Subreddit (vaihe vaiheelta) (1)

Nyt, kuten näkyy, on sallittua indeksoida haluamamme asiat.

Web Scrapingissa on kolme pääkomponenttia, tai voit myös ilmaista Web-kaappauksen kolmivaiheisen kehyksen:

  1. Indeksointi: Ensimmäinen askel on aina siirtyä kohdesivustolle tekemällä HTTP-pyyntöjä ja ladata saamasi vastaus.
  2. Parse & Transform: Kun olet saanut vastauksen. Nyt on aika jäsentää nämä ladatut tiedot HTML-jäsennykseen, kuten BeautifulSoup, ja purkaa tarvittavat tiedot.
  3. Store: Nyt kun olet purkanut tarvittavat tiedot. Voit tallentaa tämän helposti JSON- tai CSV-tiedostona tai suoraan tietokantaan, kuten Mongo DB:hen.

Jos suoritit Analytics Vidhya -peruskurssin, saatat tuntea ne erittäin hyvin. Nyt aiomme soveltaa jokaista vaihetta yksitellen.

Indeksoida

Ensin meidän on navigoitava kohdeverkkosivulle tekemälläHTTPpyynnöt ja vastauksen lataaminen.

Joten aloita tuomalla tarvittavat kirjastot (esim.pyynnötjaKaunis keitto). Nyt määritetäänURL-osoitejaotsikkomuuttuja. Ensimmäinen muuttuja varaa URL-osoitteet indeksoitaviksi ja toinen muuttuja varaa pyyntösiKäyttäjä agenttiid, joka on todennusta varten valmistushetkelläHTTPpyynnöt.

# Tuodaan vaadittuja kirjastojatuontipyyntöjä bs4:stä Import BeautifulSoup# Url to Scrapurl = "https://www.reddit.com/r/MachineLearning/new/"# Asetetaan otsikko autentikointiheaderille= { 'User-agent': "Mozilla/5.0 (Windows NT 6.3) AppleWebKit/537.36 (KHTML, kuten Gecko) Chrome/91.0.4472.124 Safari/537.36 OPR/77.0.4054.203 (Edition Campaign 34)"}

Nyt tekemässäHTTPpyyntöjä käyttämälläpyyntömenetelmäpyynnötmoduuli ja lataa vastaus vastausmuuttujaan.

Lähtö: -

Parse & Transform

Nyt on aika jäsentää nämä ladatut tiedot HTML-jäsentimeen (ts.Kaunis keitto)& säilytä se atiedotmuuttuja.

# Tietojen jäsentäminen html-jäsennykseen ja datamuuttujien tallentaminen = BeautifulSoup(response.text, "html.parser")

Käydään siis manuaalisesti koneoppimisen niche subredditissä, eli"r/MachineLearning"ja napsautaCtrl+Shift+Cjonka avulla voit tarkastaa kunkin sivun osion ja nähdä sen vastaavat HTML-tunnisteet ja sen attribuutit arvoineen.

Aloittelijan Web Scraping Project: Web Scraping Subreddit (vaihe vaiheelta) (3)

Kuvassa jo näkyy,divkanssaattribuuttiarvojälkikonttion kaksi lisääkaksisen sisällä. Kun kaivaat ensindiv, siinä on tiedot (eli äänestysosio). Ja toinendivsisältää tietoja (eli julkaisun päivämäärä/aika -osio, otsikkoosio, kuvausosio ja kommenttiosio). Tässä meidän on raaputtava vain otsikko ja sen kuvausosio. Joten meidän on indeksoitava toinendivsisällädivjolla on sen attribuuttiarvopostikontti.

Kun kaivaat toisendiv, kuten jo mainittiin, se sisältää neljä muuta alajakoa(elijulkaisun päivämäärä/aika, otsikko, kuvaus ja kommenttiosat). Nyt on löydettävä mikädivtallentaa vastaavan osan. Joten kun käytät komentoa (esim.Ctrl+Shift+C)ja viemällä hiiren otsikon päälle, saat sen koostumuksendiv-osio tarkistusikkunassa, joka tallentaa kyseisen viestin otsikkotekstin.

Aloittelijan Web Scraping Project: Web Scraping Subreddit (vaihe vaiheelta) (4)

Jos kaivaat sen sisään, huomaat, että otsikkoteksti on tallennettuthe

tag.

Aloittelijan Web Scraping Project: Web Scraping Subreddit (vaihe vaiheelta) (5)

Käytämme samanlaista lähestymistapaa löytääksemmedivjoka sisältää postauksen kuvauksen. Kun kaivaat indeksoimamme divin sisään, saatdivkanssaluokka (eli STit0dLageRsa2yR4te_b), ja kun menet sen sisään, näet, että kaikki viestisi kuvaukset ovat tallessa

tag.

Aloittelijan Web Scraping Project: Web Scraping Subreddit (vaihe vaiheelta) (6)

Nyt tiedät mikä tunniste missädivtallentaa tarvittavat tiedot (eli viestin otsikon ja sen kuvauksen), jotka haluat kaapata.

Aloittelijan Web Scraping Project: Web Scraping Subreddit (vaihe vaiheelta) (7)

Ensin indeksoimme toisendivsisällädivattribuutin arvon kanssapostikontti.

# Indeksoidaan toista div-osaa post-säilön sisällä divcrawl_data = data.find('div', attrs = {'class', '_1poyrkZ7g36PawDueRza-J _11R7M_VOgKO1RJyRSRErT3'})

Nyt pääsemme otsikkoon ja sen kuvaukseen tämän sisälläindeksointitiedotmuuttuja yksitellen. Avaa ensin viestin otsikko raaputtamalla

tagi käyttämällä menetelmää (esim.löytö())ja säilytä sepäämuuttuja.

# Postipään otsikon kaapiminen = crawl_data.find('h3')print(head.text)

Lähtö:

Aloittelijan Web Scraping Project: Web Scraping Subreddit (vaihe vaiheelta) (8)

Pääset nyt kuvaukseen indeksoimalla tageja käyttämällämenetelmä (eli FindAll())ja tallenna ne muuttujiin (esim.kuvaus). Koska muuttuja (ts.kuvaus)on joukko kappaleita. Sitten sinun on saavutettava jokainen muuttujan kappale yksitellen käyttämällä avartensilmukka ja sittenTulostase otsikon alle.

# Postdescriptionin kuvausosuuden käyttäminen = crawl_data.findAll('p')for para in description: print(para.text)

Lähtö:

Aloittelijan Web Scraping Project: Web Scraping Subreddit (vaihe vaiheelta) (9)

Voit yhdistää alla olevan subreddit-kuvakaappauksen

Aloittelijan Web Scraping Project: Web Scraping Subreddit (vaihe vaiheelta) (10)

Onnittelut!!! Olet poistanut subredditin uuden viestin onnistuneesti.

Entä jos useita viestejä?

Entä jos haluat kaapata useita viestejä yhden uuden viestin sijaan. Kyllä sinäkin pystyt siihen. Sinun on tehtävä muutamia muutoksia edelliseen koodiisi.

# Aiemmin indeksoit tietoja käyttämällä .find()-menetelmää, joka on vain yhdelle viestille# useille korvauksille. Korvaa .find() menetelmällä .findAll() samoilla parametreilla. _11R7M_VOgKO1RJyRSRErT3"})

Nyt,crawl_multiple_dataon joukkodivs. Niin,sinun on käytettävä niitä yksitellen käyttämällävartensilmukka.

num=0 # otsikon lukumäärän ilmaisemiseksi# Jokaisen divin käyttäminen tai voimme sanoa jokaisen postauksen yksitellen crawl_post in crawl_multiple_data: # Viestin otsikon kaapiminen = crawl_post.find('h3') num+=1print(f"Heading{num}" :t", head.text, "nn") # Viestin kuvausosan kuvaus = crawl_post.findAll('p') for para in description: print(para.text,"n")

Lähtö:

Aloittelijan Web Scraping Project: Web Scraping Subreddit (vaihe vaiheelta) (11)

Onko kaikki viestit kuvattu vain tekstissä?

Ei. Kun vierität alaspäin, huomaat, että joidenkin viestien kuvaukset ovat mediaa, kuten video tai kuva.

Aloittelijan Web Scraping Project: Web Scraping Subreddit (vaihe vaiheelta) (12)

Joten kun yrität raaputtaa näitä viestejä käyttämällä edellistä koodia, saat tulosteena otsikon ilman kuvausta. Tarkista aikaisempi tulostekuva. Sellaista kuvausta ei ole välissätoinen otsikkoja kolmasotsikko.

Kun tarkastelet näitä viestejä, huomaat, että niissä ei ollut kappaletta(

) -tunnisteen sisälläluokka (eli STit0dLageRsa2yR4te_b ). Joten kuinka voit varmistaa, että jos ei ole

-tunniste indeksoiduissa tiedoissa tyhjän paikan sijaan, näytä viesti (esim."Sisältötyyppi: Media"), tulosnäytössä sen sijaan, että jättäisit meille tyhjän osion.

Tämä ongelma ratkaistaan ​​käyttämällä python-ehtoja (esim.tai muuten).

# mediasisällölle# Indeksoinnin jälkeen description# aseta ehdot itif:n päälle description:print("Content-type:t Text") for para in description: print("n", para.text)else: print("Content-type: t Media")

Lähtö:

Aloittelijan Web Scraping Project: Web Scraping Subreddit (vaihe vaiheelta) (13)

Ovatko kaikki viestit samaa luokkaa?

Lähes kaikki ovat samaa luokkaa paitsi artikkeliviestit.

Aloittelijan Web Scraping Project: Web Scraping Subreddit (vaihe vaiheelta) (14)

Kuinka sitten raaputtaa ne?.

Voit raaputtaa ne helposti asettamalla neluokkaasisäänattrsosa meidäncrawl_multiple_dataja jättää koko koodi ennalleen.

# Artikkelin viestien luokan lisääminen attrs-osioon crawl_multiple_datacrawl_multiple_data = data.findAll('div', attrs={"_1poyrkZ7g36PawDueRza-J _11R7M_VOgKO1RJyRSRErT3", "_1poyrkZ7g36PawDueRza-J _2uazWzYzM0Qndpz5tFu3EX"})

Lähtö:

Aloittelijan Web Scraping Project: Web Scraping Subreddit (vaihe vaiheelta) (15)
Aloittelijan Web Scraping Project: Web Scraping Subreddit (vaihe vaiheelta) (16)

Hienoa, teit ensimmäisen subreddit-indeksointirobotisi.

Seuraavat vaiheet

Koska olet saanut ensimmäisen subreddit-indeksointirobotisi valmiiksi, mitä seuraavaksi?

Mitä sen jälkeen pitäisi tehdä?

Sinulla on kaksi vaihtoehtoa täältä:

  1. joko voit tehdä lisäkehitystä koodissa tai
  2. joko voit ottaa enemmän aloittelijoitahankkeitakuten tämä

Muutamia ehdotuksia indeksointirobotin kehittämiseksi:

  1. Yritä raaputtaa viestien ajankohta, kun ne julkaistaan, ja näytä se tulosnäytössä otsikon ja sisällön välissä.
  2. Yritä poistaa julkaisun plus- ja miinusäänien määrä ja näytä se tulosnäytössä otsikon ja sisällön välissä.
  3. Voit myös kaapata tämän viikon tai kuukauden kuumimmat viestit kyseisessä subredditissä. Ja näytä ne Output-näytössä sijoituksen mukaan.
  4. Voit jopa yrittää poistaa keskustelun, joka liittyy tiettyyn aiheeseen (esim. ura, työpaikat).

Usein Kysytyt Kysymykset

Q1. Kuinka aloitan verkkokaappausprojektin?

V. Aloita verkkokaappausprojekti seuraavasti:
1. Määritä projektin laajuus: Määritä tiedot, jotka haluat poimia, ja verkkosivustot, joita haluat kaapata.
2. Valitse ohjelmointikieli: Python on suosittu web-kaappauksessa, koska se sisältää runsaasti kirjastoja, kuten Beautiful Soup ja Scrapy.
3. Ymmärrä verkkosivuston käyttöehdot: Varmista, että noudatat laillisia ja eettisiä ohjeita.
4. Tunnista tietolähde: Analysoi verkkosivuston rakennetta ja määritä haluamasi tiedot sisältävät HTML-elementit.
5. Kirjoita kaavinkoodi: Käytä kirjastoja, kuten Beautiful Soup tai Scrapy, navigoidaksesi ja poimiaksesi tietoja verkkosivuilta.
6. Käsittele tietojen tallennusta: Päätä, kuinka tallennat kopioidut tiedot, kuten CSV-, JSON- tai tietokantaan.
7. Testaa ja toista: Vahvista koodisi ja tee tarvittavat säädöt reunatapausten tai dynaamisten verkkosivustojen käsittelemiseksi.
8. Skaalaa vastuullisesti: Ota nopeusrajoitukset käyttöön ja kunnioita verkkosivuston palvelinresursseja.
9. Valvonta ja ylläpito: Tarkista säännöllisesti, onko verkkosivuston rakenteessa tai tietomuodossa muutoksia, ja päivitä koodisi vastaavasti.
Muista ottaa huomioon lailliset ja eettiset näkökohdat ja kunnioittaa aina verkkosivuston palveluehtoja ja tietosuojakäytäntöjä.

Q2. Onko verkkoraapiminen laillista 2023?

V. Yleisesti ottaen verkon kaapiminen voi olla laillista, jos se tehdään henkilökohtaiseen käyttöön, julkisilla tiedoilla tai verkkosivuston omistajan luvalla. Suojattujen tai tekijänoikeudella suojattujen tietojen, arkaluontoisten henkilötietojen kerääminen tai verkkosivuston käyttöehtojen rikkominen voi kuitenkin olla laitonta. On erittäin tärkeää tarkistaa verkkosivuston käyttöehdot, robots.txt-tiedosto ja kaikki sovellettavat lait ennen kuin aloitat verkkokaappauksen.

Johtopäätös

Tämä projekti auttaa sinua soveltamaan opittuja käsitteitäJohdatus verkkokaappaukseen pythonillaAnalytics Vidhyan kurssi tosielämässä.

Muista, että mitä likaisemmiksi kätesi tulevat tämäntyyppisissä projekteissa, sitä paremmin tulet mukautumaan tähän taitoon. Vaikka sinulla on kysyttävää tähän projektiin tai uuteen lähestymistapaan Reddit-viestien romuttamiseksi. Sitten voit vapaasti keskustella kanssaniLinkedIntai alla olevissa kommenteissa.

Pysy kuulolla Analytics Vidhyan tulevista jännittävistä artikkeleistani.

Tässä artikkelissa näkyvät mediat eivät ole Analytics Vidhyan omistuksessa, ja niitä käytetään tekijän harkinnan mukaan.

Liittyvät

References

Top Articles
Latest Posts
Article information

Author: Edmund Hettinger DC

Last Updated: 09/29/2023

Views: 6592

Rating: 4.8 / 5 (58 voted)

Reviews: 81% of readers found this page helpful

Author information

Name: Edmund Hettinger DC

Birthday: 1994-08-17

Address: 2033 Gerhold Pine, Port Jocelyn, VA 12101-5654

Phone: +8524399971620

Job: Central Manufacturing Supervisor

Hobby: Jogging, Metalworking, Tai chi, Shopping, Puzzles, Rock climbing, Crocheting

Introduction: My name is Edmund Hettinger DC, I am a adventurous, colorful, gifted, determined, precious, open, colorful person who loves writing and wants to share my knowledge and understanding with you.