Не получается коректно передать ссылку при парсинге
Проблема возникает с передачей ссылки в целом она копируется, но она имеет мало общего с настоящей ссылкой товара например:
Ссылка которую выдает программа: 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 с помощью библиотек.