• 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

Object Storage Arubacloud
0 głosów
422 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 (253,280 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ź 162 wizyt
+1 głos
1 odpowiedź 271 wizyt
0 głosów
5 odpowiedzi 1,153 wizyt
pytanie zadane 3 października 2022 w Offtop przez nielotweb Bywalec (2,240 p.)

92,567 zapytań

141,420 odpowiedzi

319,616 komentarzy

61,953 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...