как распарсить данные внутри тэга script
подскажите, пжл, как на python3 распарсить данные внутри тэга script? исходная страница вот по этому адресу http://www.opeo.ru/01.01.05.01/member_list.aspx мне нужно получить список url-ов для каждого действующего оценщика. проблема в том, что этого списка нет в HTML коде страницы, этот список подгружается с помощью JS.
с помощью BS я могу получить любой из тэгов script.
def get_page_data(html):
soup = BeautifulSoup(html, 'lxml')
script = soup.find_all('script')
for s in script:
print(s)
но я не понимаю, как мне залезть вовнутрь тэга script и получить из него данные? подскажите, пжл, где и что почитать на эту тему? буду очень благодарен.
Ответы (1 шт):
url-ы каждого оценщика я с горем пополам достал.
в отладчике нашел url из которого грузится html с таблицей и распарсил ее с помощью BS
вот этот url
но теперь столкнулся с другой проблемой.
я получил 439 url-ов каждый выглядит вот так
когда я пытаюсь любой из этих url-ов прогнать через парсер, чтобы получить дополнительные сведения, полученные url-ы у меня подменяются.
вот код
def get_html(url):
r = requests.get(url)
return r.text
def get_page_data(html):
soup = BeautifulSoup(html, 'lxml')
table = soup.find('table', class_='table-member-list').find('tbody').find_all('tr')
for i in range(len(table)):
persons_url = 'http://nbase.opeo.ru/01.01.05.01/member_card.aspx'
persons_id = table[i].find_all('td')[1].find('a').get('data-id')
persons_card = '/01.01.05.01/member_card.aspx'
persons_css = '/Content/register.css'
params = {'id':persons_id,
'card':persons_card,
'css':persons_css}
headers = {'User-Agent':'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:77.0) Gecko/20100101 Firefox/77.0'}
req = requests.get(persons_url, params=params, headers=headers)
persons_html = req.text
persons_soup = BeautifulSoup(persons_html, 'lxml')
name = persons_soup.find('h1').text.strip()
print(name)
def main():
url = 'http://nbase.opeo.ru/api/app/member_list_app.aspx?card=/01.01.05.01/member_card.aspx&css=/Content/register.css'
get_page_data(get_html(url))
print(name) - в качестве теста, чтобы убедиться, что код работает.
он должен выводить имя, но выводит другой текст.
начинаю выяснять почему и вижу, что в функции get_html(url) идет подмена url-а
он вставляется такой
http://nbase.opeo.ru/access/loginform.aspx?ReturnUrl=%2f01.01.05.01%2fmember_card.aspx%3fid%3d7829ce9b-fa70-46ca-9d71-abe600cf2e11%26card%3d%2f01.01.05.01%2fmember_card.aspx%26css%3d%2fContent%2fregister.css&id=7829ce9b-fa70-46ca-9d71-abe600cf2e11&card=/01.01.05.01/member_card.aspx&css=/Content/register.css
начинаю смотреть html всей страницы и вижу там такой кусок кода
<script>
$(document).ready(function () {
document.domain = "opeo.ru";
var key = getParameterByName("id");
var url = "/api/app/member_card_app.aspx";
var s = "http://nbase.opeo.ru" + url + "?"
+ "id=" + key
+ "&"
+ "card=/01.01.05.01/member_card.aspx&css=/Content/register.css"
;
//console.log(s);
$("#f").attr("src", s).appendTo("#xframe").iFrameResize();
$("article").iFrameResize();
;
});
function getParameterByName(name, url) {
if (!url) url = window.location.href;
name = name.replace(/[\[\]]/g, "\\$&");
var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
results = regex.exec(url);
if (!results) return null;
if (!results[2]) return '';
return decodeURIComponent(results[2].replace(/\+/g, " "));
}
</script>
я еще только начинаю осваивать питона, а тут еще js на мою голову. я так понимаю, именно этот скрипт перебрасывает меня с нужной страницы на форму регистрации. кто-то может пояснить, как обойти это в парсере и получить html нужной мне страницы? ведь если я нужный мне url тупо вставляю в окно браузера, все нормально грузится