Форум сайта python.su
Всем привет.
Почему отображаются лишние слеши в коде страницы? Из-за этого не могу найти div c нужным class через BeautifulSoup
Через DevTool в ответе отображается нормально: div class=“form-group”, а если смотреть код страницы и код при запросе через модуль Requests, то код выглядит уже так: div class=\“form-group\”, т.е. лишние слеши добавляются.
Отредактировано Klakk (Март 26, 2023 09:50:47)
Офлайн
Приведи код страницы и код запроса в requests.
Офлайн
py.user.next
Приведи код страницы и код запроса в requests.
Отредактировано Klakk (Март 26, 2023 22:24:15)
Офлайн
Это код на языке JavaScript, который встроен в HTML-страницу в виде текста. Бэкслеши там из-за того, что это всё один строковой литерал в JavaScript-коде. То есть это строка, в которой записаны куски HTML-кода.
Так что ты можешь сначала вырезать всю эту строку из JavaScript-кода с помощью модуля re (регулярные выражения). И потом эту строку можно подать в BeautifulSoup напрямую, чтобы сформировать из неё HTML-документ. И в нём потом можно будет искать классы тегов.
Пример работы с текстом
>>> import bs4 >>> >>> text = "a<div class=\"x\">b</div><div class=\"y\">c</div>d" >>> >>> doc = bs4.BeautifulSoup(text, 'html.parser') >>> node = doc.find('div', class_='y') >>> print(node.text) c >>>
Офлайн
py.user.nextСпасибо за совет. Выдрал строку из кода JavaScript через re:
Так что ты можешь сначала вырезать всю эту строку из JavaScript-кода с помощью модуля re
r = work.get(url, headers=headers).text m = re.search('null, null, \"(.+?)\", null', r) #текст [b]null, null, "[/b] после которой начинается искомая строка, текст [b]", null[/b] перед которым заканчивается искомая строка if m: found = m.group(1)
text = 'div class=\”hook-details1679850205 hook-details\“>\n <title>#7159581 Строительная заявка<\/title>\n\n <div class=\”agg-details__header sticky opaque\“>\n <div class=\”hidden js–order-notifications\“ id=\”notify_7159581\“\n data-mercure-url=\”https/вырезал адрес.ru:7003/.well-known/mercure\“\n data-order=\”7159581\“><\/div>\n <div class=\”clearfix form-text agg-order-title\“>\n' print (text)
Отредактировано Klakk (Март 28, 2023 07:10:05)
Офлайн
[code python]
все коды на форуме пиши в такой конструкции
[/code]
print(repr(found))
Отредактировано py.user.next (Март 27, 2023 23:49:42)
Офлайн
m = re.search('null, null, \"(.+?)\", null', r) if m: found = m.group(1) list = 'div class=\"hook-details1679980270 hook-details\">\n <title>#7159581 Строительная заявка<\/title>\n\n <div class=\"agg-details__header sticky opaque\">\n ' print(found[1:-511368]) print(repr(found[1:-511368])) print(repr(list)) print(list)
div class=\"hook-details1679980537 hook-details\">\n <title>#7159581 Строительная заявка<\/title>\n\n <div class=\"agg-details__header sticky opaque\">\n 'div class=\\"hook-details1679980537 hook-details\\">\\n <title>#7159581 Строительная заявка<\\/title>\\n\\n <div class=\\"agg-details__header sticky opaque\\">\\n ' 'div class="hook-details1679980270 hook-details">\n <title>#7159581 Строительная заявка<\\/title>\n\n <div class="agg-details__header sticky opaque">\n ' div class="hook-details1679980270 hook-details"> <title>#7159581 Строительная заявка<\/title> <div class="agg-details__header sticky opaque">
Офлайн
Надо подредактировать его после взятия через re.
>>> text = 'div class=\\"hook-details1679980537 hook-details\\">\\n <title>#7159581 Строительная заявка<\\/title>\\n\\n <div class=\\"agg-details__header sticky opaque\\">\\n ' >>> >>> newtext1 = text.replace('\\"', '"') >>> newtext2 = newtext1.replace('\\n', '\n') >>> newtext3 = newtext2.replace('\/', '/') >>> newtext4 = '<{}</div></div>'.format(newtext3) >>> >>> out = newtext4 >>> >>> print(out) <div class="hook-details1679980537 hook-details"> <title>#7159581 Строительная заявка</title> <div class="agg-details__header sticky opaque"> </div></div> >>> >>> import bs4 >>> >>> doc = bs4.BeautifulSoup(out, 'html.parser') >>> node = doc.find('title') >>> print(node.text) #7159581 Строительная заявка >>>
Отредактировано py.user.next (Март 28, 2023 08:43:58)
Офлайн
py.user.nextНо все же то, что попадает в found не отличается визуально от того, что записывается в list, а печатается по разному - у found переносы не отрабатываются. Может это скрытые символы или кодировка так влияет?
И когда у тебя будет полноценный HTML-код, можно его подать в BeautifulSoup уже.
Офлайн
KlakkТы преобразовал текст?
Но все же то, что попадает в found не отличается визуально от того, что записывается в list, а печатается по разному
KlakkНет.
Может это скрытые символы или кодировка так влияет?
Офлайн