Не получается коректно передать ссылку при парсинге

Проблема возникает с передачей ссылки в целом она копируется, но она имеет мало общего с настоящей ссылкой товара например:

Настоящая Сылка: https://russian.alibaba.com/product-detail/kipardo-17-inch-18-inch-6x139-7-et-12-passenger-car-alloy-wheel-rims-1600318056159.html?spm=a2700.shop_pl.41413.11.7dbd4841pDUAC5

Ссылка которую выдает программа: https://russian.alibaba.com/product/1600318056159-803909973/KIPARDO_17_inch_18_inch_6x139_7_ET_12_passenger_car_alloy_wheel_rims.html

import requests
from bs4 import BeautifulSoup
   
CSV = 'disks.csv'
URL = 'https://rimax-industry.en.alibaba.com/productlist-1.html'
LINK = 'https://russian.alibaba.com'
HEADERS = {
    'accept': '*/*',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)Chrome/92.0.4515.131'
}


def get_html(url, params=''):
    r = requests.get(url, headers=HEADERS, params=params)
    return r


def get_content(html):
    soup = BeautifulSoup(html, 'html.parser')
    items = soup.find_all('div', class_='icbu-product-card vertical large product-item')
    items = items + soup.find_all('div', class_='icbu-product-card vertical large product-item last')
    disks = []

    for item in items:
        disks.append(
            {
                'title': item.find('div', class_='title').get_text(),
                'link_prod': item.find('div', class_='product-info').find('a').get('href')
            }
        )
    return disks

html = get_html(URL)
print(get_content(html.text))

Ответы (1 шт):

Автор решения: CrazyElf

Вы получаете относительные ссылки, нужно их переделать в абсолютные. Например, так:

import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin,urlparse,urlunparse
   
CSV = 'disks.csv'
URL = 'https://rimax-industry.en.alibaba.com/productlist-1.html'
LINK = 'https://russian.alibaba.com'
HEADERS = {
    'accept': '*/*',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)Chrome/92.0.4515.131'
}


def get_html(url, params=''):
    r = requests.get(url, headers=HEADERS, params=params)
    return r


def get_content(html, site):
    soup = BeautifulSoup(html, 'html.parser')
    items = soup.find_all('div', class_='icbu-product-card vertical large product-item')
    items = items + soup.find_all('div', class_='icbu-product-card vertical large product-item last')
    disks = []

    for item in items:
        disks.append(
            {
                'title': item.find('div', class_='title').get_text(),
                'link_prod': urljoin(site, item.find('div', class_='title').find('a').get('href'))
            }
        )
    return disks

html = get_html(URL)
pr = urlparse(URL)
site = urlunparse((pr.scheme, pr.netloc, '', '', '', ''))
print(get_content(html.text, site))

Можете, конечно, и жёстко задать префикс сайта константой, но лучше это делать универсальным образом - добывать из URL с помощью библиотек.

→ Ссылка