Vinnaren i pepparkakshustävlingen!
  • 1
  • 2
2023-04-27, 13:26
  #1
Medlem
JSelwyns avatar
Jag håller på att testa mig fram med BeautifulSoup4 och genom webscraping.

Testsidan är Biltemas och jag vill få fram endast email som separat entity. Jag lyckas med varuhuset och telefonnumret men som sagt inte emailaddressen. Jag misstänker för att de båda har samma class så jag måste använda mig av något slags index? Här är länken: https://www.biltema.se/varuhus-och-oppettider/

Som ni ser så så har två <li>:s samma klassnamn och jag vill bara plocka ut emailadressen. Hilfe. Tack!

Förkortad version från ovanstående länk.
<li class="flex__inline--center flex-wrap">
<span>Telefon:</span><a href="tel:077-52000 00" title="link titel">077-520 00 00</a></li>

<li class="flex__inline--center flex--wrap">
<a href="mailto:avesta@biltema.com?Subject=Biltema Avesta" title="link titel">avesta@biltema.com</a></li>
Citera
2023-04-27, 13:46
  #2
Medlem
frdks avatar
Citat:
Ursprungligen postat av JSelwyn
Jag håller på att testa mig fram med BeautifulSoup4 och genom webscraping.

Testsidan är Biltemas och jag vill få fram endast email som separat entity. Jag lyckas med varuhuset och telefonnumret men som sagt inte emailaddressen. Jag misstänker för att de båda har samma class så jag måste använda mig av något slags index? Här är länken: https://www.biltema.se/varuhus-och-oppettider/

Som ni ser så så har två <li>:s samma klassnamn och jag vill bara plocka ut emailadressen. Hilfe. Tack!

Förkortad version från ovanstående länk.
<li class="flex__inline--center flex-wrap">
<span>Telefon:</span><a href="tel:077-52000 00" title="link titel">077-520 00 00</a></li>

<li class="flex__inline--center flex--wrap">
<a href="mailto:avesta@biltema.com?Subject=Biltema Avesta" title="link titel">avesta@biltema.com</a></li>

använd regex?
sen ska man inte hålla på och scama folk hoppas jag du vet
Citera
2023-04-27, 14:04
  #3
Medlem
JSelwyns avatar
Citat:
Ursprungligen postat av frdk
använd regex?
sen ska man inte hålla på och scama folk hoppas jag du vet

Tack. Bara i utbildningssyfte och ingenting annat.
Citera
2023-05-07, 20:00
  #4
Medlem
SKetchers avatar
Du behöver inte regex.
Kod:
/*
Skit i <li>. Titta nivån under, a-taggarna har det vi behöver
Har inte rört soppan på hundra år men något sånt här där vi matchar attribute i a-taggen och början  av strängen med *=
Vilket iofs är lite regexigt men skit samma
*/
soup.select('a[href*="tel"]')
soup.select('a[href*="mailto"]'
Citera
2023-05-20, 08:30
  #5
Medlem
0xgh64s avatar
Nu är jag ingen expert på BS4 men skulle använt Selenium där kan du använda id , name, class name, link text, tags, CSS selector och XPATH.
Citera
2023-05-20, 08:34
  #6
Medlem
0xgh64s avatar
Citat:
Ursprungligen postat av SKetcher
Du behöver inte regex.
Kod:
/*
Skit i <li>. Titta nivån under, a-taggarna har det vi behöver
Har inte rört soppan på hundra år men något sånt här där vi matchar attribute i a-taggen och början  av strängen med *=
Vilket iofs är lite regexigt men skit samma
*/
soup.select('a[href*="tel"]')
soup.select('a[href*="mailto"]'
Fast är det endast emails han ska ha så regexp är ett rätt så bra alternativ.

Alternativt TS hur jag skulle gjort det är att använda burpsuite och installera en extension från bapp store som passiv scannar sidan med regexp för att hitta API keys, emails, passwords etc. Kommer nu inte ihåg om extension är pro eller inte eller namnet atm nu när när jag är på mobilen och då jag vanligtvis endast använder JS miner i liknande scenarion för min del, men detta är dock irrelevant i det här fallet. Dm om intresserad kan jag kolla.
__________________
Senast redigerad av 0xgh64 2023-05-20 kl. 08:59.
Citera
2023-05-21, 00:55
  #7
Medlem
SKetchers avatar
Citat:
Ursprungligen postat av 0xgh64
Fast är det endast emails han ska ha så regexp är ett rätt så bra alternativ.

Alternativt TS hur jag skulle gjort det är att använda burpsuite och installera en extension från bapp store som passiv scannar sidan med regexp för att hitta API keys, emails, passwords etc. Kommer nu inte ihåg om extension är pro eller inte eller namnet atm nu när när jag är på mobilen och då jag vanligtvis endast använder JS miner i liknande scenarion för min del, men detta är dock irrelevant i det här fallet. Dm om intresserad kan jag kolla.

Varför skriver du inte den regex snutt som funkar om du ska klaga på mitt korrekta svar?
Citera
2023-05-21, 00:56
  #8
Medlem
SKetchers avatar
Citat:
Ursprungligen postat av 0xgh64
Nu är jag ingen expert på BS4 men skulle använt Selenium där kan du använda id , name, class name, link text, tags, CSS selector och XPATH.

Vad tror du beutiful soup använder, magi?
Citera
2023-05-21, 10:02
  #9
Medlem
grejigabosses avatar
Citat:
Ursprungligen postat av SKetcher
Vad tror du beutiful soup använder, magi?
Instämmet. Selenium känns mest omständigt och långsamt när man utvecklar. Antagligen använder man selenium för att man vill kunna se det i realtid, men gosh, 80% av kodskrivandet går ut på att titta på att webbläsaren laddar.
Jag hade kört BS4 alla dagar framför selenium.

Eller varför inte bara ett helt vanligt request och letar fram det man söker i ren text.
Kod:
import requests
f = requests.get("https://www.biltema.se")
print(f.text)
Citera
2023-05-21, 10:19
  #10
Medlem
grejigabosses avatar
Även om man inte "behöver" använda regex, varför inte.
Selenium är extremt omständigt i detta fallet.
Var så god.

Kod:
import requests
import re
f = requests.get("https://www.biltema.se/varuhus-och-oppettider/")
#print(f.text)

matching_emails = re.findall(r'\b[A-Za-z0-9._%+-]+@biltema\.com\b', f.text)

for email in matching_emails:
    print(email)
Citera
2023-05-21, 11:54
  #11
Medlem
Som Grej skriver är det väl bättre att använda BS4 eller dito om nu servern ger dig mailadresserna i klartext. Selenium använder man till websidor som har Java som är kodad så att du måste använda aktiva element på sidan för att få något från servern. Dvs till sidor som har blockerat att du kan hämta sidan från requests. Selenium är enbart en emulator som emulerar Cromium så att du kan komma åt innehållet på sidan.
Citera
2023-05-21, 13:39
  #12
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av Methos
Som Grej skriver är det väl bättre att använda BS4 eller dito om nu servern ger dig mailadresserna i klartext. Selenium använder man till websidor som har Java som är kodad så att du måste använda aktiva element på sidan för att få något från servern. Dvs till sidor som har blockerat att du kan hämta sidan från requests. Selenium är enbart en emulator som emulerar Cromium så att du kan komma åt innehållet på sidan.
Jag håller med alla som hittills hävdat att är mycket bättre att undvika Selenium om man kan, t.ex. med BS4.

Vad du menar med ovanstående är väl egentligen att det är väldigt Javascript-beroende (inte Java) hemsidor, där Selenium kan behövas. Sedan är Selenium normalt sett inte en browser-emulator, utan ett automatiseringsverktyg som ligger ovanpå en redan befintlig browser. Dock är jag lite osäker på headless Selenium, men jag tror inte heller det är en emulering utan att Selenium då kommunicerar med browsern-executabeln bara att den inte har något synligt fönster öppet.
Citera
  • 1
  • 2

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback