Проверьте, существует ли определенный класс и значение в HTML с помощью Beautifulsoup Python - PullRequest
0 голосов
/ 25 мая 2018

Я пишу скрипт для скарпа на сайте "yelp.fr", но чтобы убрать количество звезд, которые класс генерирует автоматически: class = "i-stars i-stars - регулярно-4 рейтинг-большой" ==> 4 запуска, класс = "i-stars i-stars - обычная оценка в 3 с половиной рейтинга" ==> 3,5

Мой вопрос, как я могу это сделать?и как я могу определить, существует ли класс на html-странице

CITIES = "la rochelle(17000)"
places = "Bars"
driver = webdriver.Chrome()
driver.get("https://www.yelp.fr/search?find_desc="+places+"&find_loc="+CITIES+"")
page = driver.page_source
soup = BeautifulSoup(page,"lxml")
etoiles=soup.find_all("div",{"class":"biz-rating biz-rating-large clearfix"})

etoiles.get_attribute("title")
if etoiles:
    print "ok"
else:
    print "not "

, иногда класс biz-rating biz-rating-large clearfix не существует, как показано ниже enter image description here

Ответы [ 3 ]

0 голосов
/ 29 мая 2018

Я решаю проблему, используя это:

yelp_url  = "https://www.yelp.com/search?find_desc=%s&find_loc=%s&start=%s"%(place,city,str(id))

        headers1 = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36'}
        response1 = requests.get(yelp_url).text
        parser = html.fromstring(response1)
        print "Parsing the page"
        listing1 = parser.xpath("//li[@class='regular-search-result']")
for results in listing1:
if raw_ratings:
                        ratings = re.findall("\d+[.,]?\d+",cleaned_ratings)[0]
                    else:
                        ratings = 0
                    price_range = len(''.join(raw_price_range)) if raw_price_range else 0
                    address  = ' '.join(' '.join(raw_address).split())
                    address=unidecode(address)
                    reservation_available = True if is_reservation_available else False
                    accept_pickup = True if is_accept_pickup else False
0 голосов
/ 31 мая 2018
raw_review_count = results.xpath(".//span[contains(@class,'review-count')]//text()")
                    raw_price_range = results.xpath(".//span[contains(@class,'price-range')]//text()")
if raw_ratings:
                        ratings = re.findall("\d+[.,]?\d+",cleaned_ratings)[0]
                    else:
                        ratings = 0
                    price_range = len(''.join(raw_price_range)) if raw_price_range else 0
0 голосов
/ 25 мая 2018

title этого DIV содержит количество звезд / рейтинг.Вы можете получить это как

ratings = soup.select(".i-stars")
for rating in ratings:
    print rating.attrs['title']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...