• 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

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
526 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,320 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ź 346 wizyt
+1 głos
1 odpowiedź 378 wizyt
0 głosów
5 odpowiedzi 1,693 wizyt
pytanie zadane 3 października 2022 w Offtop przez nielotweb Bywalec (2,240 p.)

93,166 zapytań

142,177 odpowiedzi

321,946 komentarzy

62,495 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 688p. - dia-Chann
  2. 676p. - CC PL
  3. 675p. - Łukasz Piwowar
  4. 664p. - Marcin Putra
  5. 662p. - Łukasz Eckert
  6. 649p. - Michal Drewniak
  7. 641p. - rafalszastok
  8. 641p. - rucin93
  9. 629p. - Piotr Aleksandrowicz
  10. 629p. - Adrian Wieprzkowicz
  11. 621p. - Dawid128
  12. 612p. - Mikbac
  13. 611p. - ksalekk
  14. 606p. - Mariusz Fornal
  15. 602p. - Michał Telesz
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...