Регулярное выражение Python с переменной внутри шаблона на веб-странице

#python #html #regex

#python #HTML #регулярное выражение

Вопрос:

Мне нужно выполнить поиск в коде веб-страницы шаблона, который содержит две переменные: одну известную и ту, которую я пытаюсь извлечь.

 def getcpu():
    parse()
    for child in rt.iter('proc'):
        proc = child.attrib['name']
        cpumodel= proc.replace('(R)',"").replace('(TM)','').replace('CPU','')
    return cpumodel

def passmark():
   url = urlopen('https://www.cpubenchmark.net/cpu_list.php').read().decode('utf-8')
   cpu = getcpu()
   soup =  BeautifulSoup(url, "html.parser")
   score = soup.find(text=cpu)
   print(score)
  

итак, var1 известен и должен использоваться для поиска, а var2 должен быть каким-то образом получен (код, конечно, не работает). Я просто вставил var2 туда, потому что пытаюсь объяснить, чего я хочу достичь.
Возможно ли это? Или любым другим способом, отличным от регулярного выражения?

редактировать:
лучший пример. допустим, строка в коде веб-страницы является:

 <TR id="cpu793"><TD><A HREF="cpu_lookup.php?cpu=Intel Core i5-2400 @ 3.10GHzamp;amp;id=793">Intel Core i5-2400 @ 3.10GHz</A></TD><TD>5965</TD><TD>662</TD><TD><a href="cpu.php?cpu=Intel Core i5-2400 @ 3.10GHzamp;amp;id=793#price">41.15</a></TD><TD><ahref="cpu.php?cpu=Intel Core i5-2400 @ 3.10GHzamp;amp;id=793#price">$144.99*</a></TD></TR>
  

Intel Core i5-2400 при частоте 3,10 ГГц имеет значение var1, и на основе этого я пытаюсь получить значение var2 (которое в этой строке равно 5965)

Комментарии:

1. Почему вы не используете Beautiful Soup или lxml? С помощью этих библиотек вы можете выбирать элементы на основе атрибутов, положения, текстового содержимого и т.д.

2. как это будет работать в моем случае? обновил вопрос, чтобы было немного понятнее, что я пытаюсь получить

3. Используя Beautiful Soup, вы должны выбрать элемент с текстом: «Intel Core i5-2400 при частоте 3,10 ГГц», затем выбрать следующий элемент. Псевдокод: soup.find(text='Intel Core i5-2400 @ 3.10GHz').next

4. Я бы настоятельно рекомендовал beautifulsoup здесь!

5. Я настоятельно рекомендую использовать XPath в качестве другого варианта, кроме тех, которые они предложили вам в предыдущих комментариях, поскольку он предлагает простой способ доступа к атрибутам тега. w3schools.com/xml/xml_xpath.asp

Ответ №1:

Как было предложено в комментариях, рассмотрите возможность использования BeautifulSoup:

 html = '''<TR id="cpu793"><TD><A HREF="cpu_lookup.php?cpu=Intel Core i5-2400 @ 3.10GHzamp;amp;id=793">Intel Core i5-2400 @ 3.10GHz</A></TD><TD>5965</TD><TD>662</TD><TD><a href="cpu.php?cpu=Intel Core i5-2400 @ 3.10GHzamp;amp;id=793#price">41.15</a></TD><TD><ahref="cpu.php?cpu=Intel Core i5-2400 @ 3.10GHzamp;amp;id=793#price">$144.99*</a></TD></TR>'''
var1 = 'Intel Core i5-2400 @ 3.10GHz'
import bs4
soup = bs4.BeautifulSoup(html)
result = soup.find(text=var1)
if result:
    var2 = result.next.text
else:
    print("Not found")
  

Комментарии:

1. все еще не получается. Обновлен основной код. мой var1 взят из функции, которая возвращает модель процессора. Я печатаю, что получаю правильный вывод, который совпадает с «Intel Core i5-2400 при частоте 3,10 ГГц». Я использую его в своей функции, soup.find возвращает none

2. В своем ответе я использую приведенный вами пример (самый последний). Получили ли вы ожидаемые результаты при запуске моего кода?

3. всегда выводит Not found.

4. этот самый код работает, может быть, мой var1, который является результатом функции, не является строкой?

5. Откуда я знаю? Вы должны проверить его тип.