import concurrent.futures
from lxml import html
from urllib.parse import urljoin
import constants # assuming constants.py contains relevant information
import proxy_waterfall
import time
import mongodb_utilities
# Placeholder for missing methods
# def get_variant_data(site_url): pass
# def get_image_urls(variant_data, site_url): pass
# def get_size_stock_info(site_url): pass
# def get_product_descr(variant_data, site_url): pass
# def get_color_group(site_url): pass
# def get_promo_price(variant_html): pass
# def get_category_path(variant_data, site_url): pass
# def get_gender_details(site_url): pass
def extract_data(data):
product_info = {
"product_descr": "",
"len_product_descr": "",
"gender": "",
"color_group": "",
"avail_size_list": "",
"avail_size_cnt": "-",
"site_size_cnt": "-",
"price": "-",
"outofstock_flag": "",
"picture_cnt": "",
"image_url": "",
"site_url": "",
"dtc_exclusive": "-",
'crawl_date': constants.CURRENT_DATE,
}
url = data.get('url', '')
print("Product URL ----> ", url)
if url == '':
return
headers = constants.HEADERS
if constants.COOKIES:
cookie_string = '; '.join([f"{key}={value}" for key, value in constants.COOKIES.items()])
headers['cookie'] = cookie_string
page_source = proxy_waterfall.waterfall_hits('GET', url, headers, '')
if page_source:
html_content = html.fromstring(page_source)
variant_color_list = html_content.xpath(constants.VARIANT_COLOR_LIST_XPATH) # XPath giving color variants
variant_color_list = list(set(variant_color_list))
for variant_color in variant_color_list:
site_url = urljoin('https://www.example.com', variant_color)
variant_source = proxy_waterfall.waterfall_hits('GET', site_url, headers, '')
variant_html = html.fromstring(variant_source)
# Assuming these functions return appropriate data
variant_data = get_variant_data(site_url)
images, picture_cnt = get_image_urls(variant_data, site_url)
size_info = get_size_stock_info(site_url)
for sz_info in size_info:
size = list(sz_info.keys())[0]
product_descr, len_product_descr = get_product_descr(variant_data, site_url)
product_info.update({
'product_descr': product_descr,
'len_product_descr': len_product_descr,
'color_group': get_color_group(site_url),
'avail_size_list': size,
'avail_size_cnt': "-" if size == "-" else len([size]),
'price': get_promo_price(variant_html),
'outofstock_flag': sz_info[size],
'category_path': get_category_path(variant_data, site_url),
'gender': get_gender_details(site_url),
'image_url': images,
'picture_cnt': picture_cnt
})
def main():
input_data = [
{'url': 'https://example.com/products/product1/'},
{'url': 'https://example.com/products/product2/'},
{'url': 'https://example.com/products/product3/'}
]
for _ in range(3):
input_data = mongodb_utilities.fetch_many(
input_conn, {'execution': False, 'crawl_date': constants.CURRENT_DATE}
)
wif concurrent.futures.ThreadPoolExecutor(max_workers=10) as executor:
for data in input_data:
time.sleep(0.01)
executor.submit(extract_data, data)
if __name__ == "__main__":
main()
< /code>
Я скрещиваю некоторую информацию о продуктах из API веб -сайта Ecommerce. Я использую прокси и мульти -потоки (Python), но я сталкиваюсь с проблемой, для некоторых URL -адресов продукта я правильно получаю URL -адреса изображения. Но для некоторых других продуктов я получаю 0 URL -адреса изображения. Является ли их какая -либо проблема с моей прокси или мульти -потоком? , я также не получаю надлежащего объема данных. Например, если один продукт Temphas это 5 цветовых вариантов, я получаю только 4. Кто -нибудь нет, почему это происходит? Полем Но ничего не происходит.>
Подробнее здесь: https://stackoverflow.com/questions/793 ... -threading
Не получение надлежащих данных при использовании многопоточных потоков ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Не получение надлежащих данных при использовании многопоточных потоков
Anonymous » » в форуме Python - 0 Ответы
- 9 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Должен ли я использовать атрибуты `lang` для надлежащих существительных и займов?
Anonymous » » в форуме Html - 0 Ответы
- 6 Просмотры
-
Последнее сообщение Anonymous
-