2016-03-07 2 views
0

Хорошо, поэтому я зациклился на том, как обойти эту проблему здесь. это просто частный счетчик онлайн-пользователей для игры.lxml скрипт python, как я могу удалить счет дубликата id

После некоторых исследований мне удалось перейти к этому коду, который я немного добавил в поиске, чтобы получить счет всех изображений с помощью on.png ... и он действительно работает!

from lxml import etree 
import requests 

def get_img_cnt(url): 
    response = requests.get(url) 
    parser = etree.HTMLParser() 
    root = etree.fromstring(response.content, parser=parser) 

    return int(root.xpath('count(//img[@src="pics/on.png"])')) 

Теперь мое разочарование, что это «on.png» повторяется 2 раза в случае Guild Master вне. Может ли кто-нибудь подумать о том, как обойти это? это часть HTML

<tr><td class='tabellatitolo a_dx' style=' padding:10px;' >Master 
<td class='tabelladati' style=' padding:10px;' ><img align=absmiddle src='pics/on.png'> 
<a href='?f=pg&id=55110'>Modernist</a> 

<tr><td class='tabellatitolo a_dx' style=' padding:10px;' >Membri<p>(5) 
<td class='tabelladati' style=' padding:10px;' >**<img align=absmiddle  src='pics/on.png'> 
<a href='?f=pg&id=55110'>**Modernist**</a>** - <br><img align=absmiddle src='pics/off.png'> 
<a href='?f=pg&id=232720'>Human Slayer</a> - <i>Ti stimo!</i><br> 
<img align=absmiddle src='pics/off.png'> <a href='?f=pg&id=68194'>Juggernaut</a><br> 
<img align=absmiddle src='pics/off.png'> <a href='?f=pg&id=67121'>XeDiOr ThE KoOl</a><br> 
<img align=absmiddle src='pics/on.png'> <a href='?f=pg&id=142638'>Lisbet Irmgard</a><br> 

я, возможно, думал использовать позицию контекста или, возможно, использовать на что «* О себе» (членов)?

Благодаря любой намек будет appriciated :)

+0

Да, я бы посмотрел на использование этой «Мембра» в качестве отправной точки, а затем оттуда. Похоже, что html, который вы предоставили, является неполным, поэтому трудно сказать, как это сделать именно с вашей структурой. –

ответ

0

Я собираюсь дать более жестокой, но, возможно, более простой ответ:

import re 
import requests 

def get_img_cnt(url): 
    response = requests.get(url) 

    # just take the bit after the 'Membri' section 
    member_content = response.content.split('>Membri<')[1] 

    # count the number of times you see the image 
    return len(re.findall('pics/on.png', member_content)) 

Как хорошо он будет работать, будет зависеть от остальной части HTML (которые вы не предоставили). Я бы пошел на поиск строк (например, это), прежде чем начинать выполнять синтаксический анализ html. Если это работает, это более простое и быстрое решение.

+0

интересно, хотя, кажется, не найти список member_content = response.content.split («> Пользователи * <») [1] IndexError: индексный список из диапазона это одна из страниц я ищу на http://www.uodreams.it/?f=gilda&id=7005 – UGC

+0

По какой-то причине я вижу эту страницу на английском языке. Думаю, вы могли бы использовать 'resp.text.split ('> Memb') [1]', который должен работать, будь то на английском или итальянском. –

+0

Хотя он дает эту ошибку, я понимаю концепцию, поэтому мне нужно сделать, чтобы сплести XML, пока я не доберусь до «Участников», я найду способ! Благодаря 'Traceback (самый последний вызов последнего): Файл "2test.py", строка 15, в печати "Gang:", get_img_cnt (URL) Файл "2test.py", линии 8, в get_img_cnt member_content = response.content.split ('> Memb') [1] IndexError: список указателей за пределами диапазона' – UGC