不能用漂亮的汤和 selenium 刮掉bangood站点

xxe27gdn  于 2021-09-08  发布在  Java
关注(0)|答案(2)|浏览(404)

嗨,伙计们,我发现用漂亮的汤有一些问题。我正试图抓取班古德的网站,但我不知道为什么,我只成功地抓取了物品的名称。使用 selenium 我刮项目的价格(只有联合国美元不是欧元),所以我请求您的帮助,我将非常高兴,如果你知道任何方法来克服这些问题。
我想把名字、欧元价格、折扣、明星、形象都删掉,但我不明白为什么靓汤不管用。
注:显然,我不想要所有的功能,但为什么美丽的汤给所有这些问题的原因和一个例子,如果你可以的话。
现在,我试图在这里发布我想要刮的html(如果可能的话,在漂亮的汤中)。
谢谢大家!
我想刮的链接=https://it.banggood.com/aneng-an8008-true-rms-wave-output-digital-multimeter-ac-dc-current-volt-resistance-frequency-capacitance-test-p-1157985.html?rmmds=flashdeals&cur_warehouse=usa

<span class="main-price" oriprice-range="0-0" oriprice="22.99">19,48€</span>

<strong class="average-num">4.95</strong>

 <img src="https://imgaz1.staticbg.com/thumb/large/oaupload/banggood/images/1B/ED/b3e9fd47-ebb4-479b-bda2-5979c9e03a11.jpg.webp" id="landingImage" data-large="https://imgaz1.staticbg.com/thumb/large/oaupload/banggood/images/1B/ED/b3e9fd47-ebb4-479b-bda2-5979c9e03a11.jpg" dpid="left_largerView_image_180411|product|18101211554" data-src="https://imgaz1.staticbg.com/thumb/large/oaupload/banggood/images/1B/ED/b3e9fd47-ebb4-479b-bda2-5979c9e03a11.jpg" style="height: 100%; transform: translate3d(0px, 0px, 0px);">

这些是我正在使用的函数
这不起作用:

def take_image_bang(soup):   #beautiful soup and json

    img_div = soup.find("div", attrs={"class":'product-image'})

    imgs_str = img_div.img.get('data-large')  # a string in Json format

    # convert to a dictionary
    imgs_dict = json.loads(imgs_str)
    print(imgs_dict)
    #each key in the dictionary is a link of an image, and the value shows the size (print all the dictionay to inspect)
    #num_element = 0 
    #first_link = list(imgs_dict.keys())[num_element]
    return imgs_dict

这些工作(功能get_价格仅为美元而非欧元):

def get_title_bang(soup): #beautiful soup

    try:
        # Outer Tag Object
        title = soup.find("span", attrs={"class":'product-title-text'})

        # Inner NavigableString Object
        title_value = title.string

        # Title as a string value
        title_string = title_value.strip()

        # # Printing types of values for efficient understanding
        # print(type(title))
        # print(type(title_value))
        # print(type(title_string))
        # print()

    except AttributeError:
        title_string = ""   

    return title_string

def get_Bangood_price(driver):  #selenium

    c = CurrencyConverter()

    prices = driver.find_elements_by_class_name('main-price')

    for price in prices:

        price = price.text.replace("US$","")
        priceZ = float(price)

        price_EUR = c.convert(priceZ, 'USD', 'EUR')

    return price_EUR
agyaoht7

agyaoht71#

由于您需要更改欧元url中的价格,您可以从网页中设置价格

import requests
from bs4 import BeautifulSoup
headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"}
res=requests.get("https://it.banggood.com/ANENG-AN8008-True-RMS-Wave-Output-Digital-Multimeter-AC-DC-Current-Volt-Resistance-Frequency-Capacitance-Test-p-1157985.html?rmmds=flashdeals&cur_warehouse=USA&DCC=IT&currency=EUR",headers=headers)
soup=BeautifulSoup(res.text,"lxml")

查找标题:

main_div=soup.find("div",class_="product-info")
title=main_div.find("h1",class_="product-title").get_text(strip=True)
print(title)

输出:

ANENG AN8008 Vero RMS Digitale Multimetri Tester di AC DC Corrente Tensione Resistenza Frenquenza CapacitàCOD

对于findign评论:

star=[i.get_text(strip=True) for i in main_div.find("div",class_="product-reviewer").find_all("dd")]
star

输出:

['5 Stella2618 (95.8%)',
 '4 Stella105 (3.8%)',
 '3 Stella9 (0.3%)',
 '2 Stella0 (0.0%)',
 '1 Stella2 (0.1%)']

寻找价格和其他您可以从 script 标签使用 json 加载它!

data=soup.find("script", attrs={"type":"application/ld+json"}).string.strip().strip(";")
import json
main_data=json.loads(data)

从中查找值:

price=main_data['offers']['priceCurrency']+" "+main_data['offers']['price']
image=main_data['image']
print(price,image)

输出:

EUR 19.48 https://imgaz3.staticbg.com/thumb/view/oaupload/banggood/images/1B/ED/b3e9fd47-ebb4-479b-bda2-5979c9e03a11.jpg

要在价格动态更新时查找折扣价格,您可以使用xhr链接调用并从中查找数据!这是你的电话号码
url使用post请求吧!

9jyewag0

9jyewag02#

要以欧元为单位提取数据,您需要更改链接地址并将其添加到链接末尾:
对于欧元添加:&货币=欧元
美元加成:&货币=美元
对于欧元,链接应为:https://it.banggood.com/aneng-an8008-true-rms-wave-output-digital-multimeter-ac-dc-current-volt-resistance-frequency-capacitance-test-p-1157985.html?rmmds=flashdeals&cur_warehouse=usa&currency=eur
例如:如果您希望为产品更改更改仓库:
cn变更:当前仓库=cn
美国变更:当前仓库=美国
对于pl变更:cur_warehouse=pl
这些是url的动态变量,可根据其输入更改网页。
在此之后,您的第二种方法应该可以正常工作。刮擦快乐!!!

相关问题