Python: BeautifulSoup — извлечение значения из location.href=

#python #beautifulsoup

#python #beautifulsoup

Вопрос:

Я столкнулся с проблемой, в которой мне нужно вывести значение «input.php?id = 293» ключа «location.href=» из кода.

 <script>location.href="input.php?id=293";</script>
  

Я попробовал приведенный ниже код, но в итоге застрял.

 import requests
from bs4 import BeautifulSoup
import re

url = https://localhost/sample.php
response = requests.get(url)
soup = BeautifulSoup(response.text, features="lxml")
value = soup.find_all(text=re.compile(r'location.href'))
print (value)
  

Любая помощь будет оценена.

Ответ №1:

Это можно решить следующим образом:

 from bs4 import BeautifulSoup

data = BeautifulSoup('<script>location.href="input.php?id=293";</script>')
data.get_text()[15:-2]
  

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

1. Привет, Алона! Спасибо за ответ. Я попробовал ваш код, и он дал мне пустой ответ. Можно ли получить значение, не превращая его в статический текст?

2. @Alex, но можешь ли ты получить какое-либо значение, просто попробовав data.get_text() ?

3. Нет данных, программа просто возвращает ‘ ‘. Нам нужно soup.find_all, чтобы правильно найти наши данные?

4. @Alex, есть несколько методов, которые можно использовать: find_all(), find(), find_parents(), find_previous_siblings(), find_all_next(), find_all_previous() и т.д. Но первые два являются наиболее часто используемыми

Ответ №2:

Попробуйте это:

 import re
from bs4 import BeautifulSoup

txt = """<script>location.href="input.php?id=293";</script>"""
soup = BeautifulSoup(txt, "html.parser")

pattern = re.compile(r'("input.php?id=293")')
value = soup.find_all(text=pattern)
result = pattern.search(str(value)).group()
print(result)
  

Вывод:

 "input.php?id=293"