• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Web scraping - problem z linkiem z href

0 głosów
830 wizyt
pytanie zadane 19 sierpnia 2022 w Python przez NewbieProgrammer Początkujący (480 p.)

Cześć, przerabiam ten poradnik

https://www.youtube.com/watch?v=CEOTrWowqfo 

W pewnym momencie kod pobiera linki do strony. Aktualnie jak sprawdzam 'href' w olx to wygląda on tak "/d/oferta/3-pokoje-gotowe-solidne-materialy-rakowska-ciekawa-oferta-CID3-IDQoEvU.html" tzn. nie ma https://www.olx.pl/.... przez co po wypisaniu linki są nieinteraktywne (chyba, że jest to link do otodom to wtedy link jest interaktywny) 

Chciałbym aby program dopisywał mi "https://www.olx.pl/" do linków zaczynających się od "/d/" tak aby linki te był również interaktywne. Czy ktoś mógłby mnie naprowadzić/podesłać link jak takie coś zrobić. A może nie trzeba nic podmieniać i istnieje inny sposób, żeby to zrobić?

from bs4 import BeautifulSoup
from requests import get

#https://www.youtube.com/watch?v=CEOTrWowqfo

URL = 'https://www.olx.pl/d/nieruchomosci/mieszkania/sprzedaz/warszawa/'

page = get(URL)
bs = BeautifulSoup(page.content, 'html.parser')

for offer in bs.find_all('a', class_='css-1bbgabe'):
    footer = offer.find('p', class_='css-p6wsjo-Text eu5v0x0').get_text().strip().split('-')[0]
    title = offer.find('h6').get_text().strip()
    price = (offer.find('p', class_='css-wpfvmn-Text eu5v0x0').get_text().strip())
    link = offer.find('a')

    print(offer['href'], price)




 

1 odpowiedź

+1 głos
odpowiedź 20 sierpnia 2022 przez VBService Ekspert (256,600 p.)
wybrane 21 sierpnia 2022 przez NewbieProgrammer
 
Najlepsza

Chciałbym aby program dopisywał mi "https://www.olx.pl/" do linków zaczynających się od "/d/"

możesz uzyskać taki zapis np. przez modyfikację zmiennej link

czyli

 

link = offer.find('a')

na

link = offer['href']

 

wspomnę tylko, że ten zapis

for offer in bs.find_all('a', class_='css-1bbgabe'):

"przegląda" wszystkie elementy <a> jakie pobrał get(URL)

 
a taki zapis próbuje "szukać" elementy <a> w elemencie <a> co jest błędem
[ can include a in a ]

for offer in bs.find_all('a', class_='css-1bbgabe'):
    ...

    link = offer.find('a')

 

teraz używając np. string contains(), możemy "modyfikować" zawartość link

if not link.__contains__('https'):
        link = 'https://www.olx.pl' + link

 

całość po proponowanych zmianach

from bs4 import BeautifulSoup
from requests import get
 
#https://www.youtube.com/watch?v=CEOTrWowqfo
 
URL = 'https://www.olx.pl/d/nieruchomosci/mieszkania/sprzedaz/warszawa/'
 
page = get(URL)
bs = BeautifulSoup(page.content, 'html.parser')
 
for offer in bs.find_all('a', class_='css-1bbgabe'):
    footer = offer.find('p', class_='css-p6wsjo-Text eu5v0x0').get_text().strip().split('-')[0]
    title = offer.find('h6').get_text().strip()
    price = (offer.find('p', class_='css-wpfvmn-Text eu5v0x0').get_text().strip())
    link = offer['href']

    if not link.__contains__('https'):
        link = 'https://www.olx.pl' + link

    print(link, price)

 

z zastosowaniem lambda

from bs4 import BeautifulSoup
from requests import get
 
#https://www.youtube.com/watch?v=CEOTrWowqfo
 
URL = 'https://www.olx.pl/d/nieruchomosci/mieszkania/sprzedaz/warszawa/'
 
page = get(URL)
bs = BeautifulSoup(page.content, 'html.parser')
 
for offer in bs.find_all('a', class_='css-1bbgabe'):
    footer = offer.find('p', class_='css-p6wsjo-Text eu5v0x0').get_text().strip().split('-')[0]
    title = offer.find('h6').get_text().strip()
    price = (offer.find('p', class_='css-wpfvmn-Text eu5v0x0').get_text().strip())
    link = lambda : offer['href'] if offer['href'].__contains__('https') else 'https://www.olx.pl' + offer['href']

    print(link(), price)

 

1
komentarz 21 sierpnia 2022 przez NewbieProgrammer Początkujący (480 p.)
Dzięki za pomoc i wytłumaczenie! <3

Podobne pytania

+1 głos
1 odpowiedź 879 wizyt
+1 głos
1 odpowiedź 769 wizyt
0 głosów
5 odpowiedzi 4,319 wizyt
pytanie zadane 3 października 2022 w Offtop przez nielotweb Bywalec (2,240 p.)

93,695 zapytań

142,612 odpowiedzi

323,223 komentarzy

63,223 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...