скребок для снаряжения с питоном - PullRequest
0 голосов
/ 16 октября 2019

РЕДАКТИРОВАТЬ: я пытался получить некоторые данные с Gearbest.com о нескольких продуктах, и у меня есть некоторые реальные проблемы с изменением цены доставки. Я работаю с запросами и BeautifulSoup, и до сих пор мне удалось получить имя + ссылка + цена. как я могу получить его стоимость доставки?

URL-адреса: https://www.gearbest.com/gaming-laptops/pp_009863068586.html?wid=1433363 https://www.gearbest.com/smart-watch-phone/pp_009309925869.html?wid=1433363i've пробовал:

shipping = soup.find("span", class_="goodsIntro_attrText").get("strong)
shipping = soup.find("span", class_="goodsIntro_attrText").get("strong).text
shipping = soup.find("strong", class_="goodsIntro_shippingCost")
shipping = soup.find("strong", class_="goodsIntro_shippingCost").text

суп возвращаемое значение отсюда (URL-адрес каждой ссылки на продукт):

def get_page(url):
    client = requests.get(url, headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36"})
    try:
        client.raise_for_status()
    except requests.exceptions.HTTPError as e:
        print("Error in gearbest with the url:", url)
        exit(0)
    soup = BeautifulSoup(client.content, 'lxml')
    return soup

есть идеи, что я могу сделать?

1 Ответ

0 голосов
/ 16 октября 2019

Вы хотите использовать суп, а не souo. Кроме того, кажется, что есть разница между тем, что возвращается из запроса, и тем, что находится на странице для меня.

from bs4 import BeautifulSoup as bs
import requests

urls = ['https://www.gearbest.com/gaming-laptops/pp_009863068586.html?wid=1433363','https://www.gearbest.com/smart-watch-phone/pp_009309925869.html?wid=1433363i']

with requests.Session() as s:
    for url in urls:
        r = s.get(url, headers = {'User-Agent':'Mozilla\5.0'})
        soup = bs(r.content, 'lxml')
        print(soup.select_one('.goodsIntro_price').text)
        print(soup.select_one('.goodsIntro_shippingCost').text)  # soup.find("strong", class_="goodsIntro_shippingCost").text

Для фактической цены кажется, что на вкладке сети есть динамические каналы для цены, хотя она хранится в actual fee. Так что, возможно, существует динамическое обновление на основе цены доставки.

from bs4 import BeautifulSoup as bs
import requests

urls = ['https://www.gearbest.com/goods/goods-shipping?goodSn=455718101&countryCode=GB&realWhCodeList=1433363&realWhCode=1433363&priceMd5=540DCE6E4F455639641E0BB2B6356F15&goodPrice=1729.99&num=1&categoryId=13300&saleSizeLong=50&saleSizeWide=40&saleSizeHigh=10&saleWeight=4.5&volumeWeight=4.5&properties=8&shipTemplateId=&isPlatform=0&virWhCode=1433363&deliveryType=0&platformCategoryId=&recommendedLevel=2&backRuleId=',
        'https://www.gearbest.com/goods/goods-shipping?goodSn=459768501&countryCode=GB&realWhCodeList=1433363&realWhCode=1433363&priceMd5=91D909FDFFE8F8F1F9D1EC1D5D1B7C2C&goodPrice=159.99&num=1&categoryId=12004&saleSizeLong=12&saleSizeWide=10.5&saleSizeHigh=6.5&saleWeight=0.266&volumeWeight=0.266&properties=8&shipTemplateId=&isPlatform=0&virWhCode=1433363&deliveryType=0&platformCategoryId=&recommendedLevel=1&backRuleId=']

with requests.Session() as s:
    for url in urls:
        r = s.get(url, headers = {'User-Agent':'Mozilla\5.0'}).json()
        print(r['data']['shippingMethodList'][0]['actualFee'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...