Как извлечь параметр GET URL из тега <a>, из полного HTML-текста - PullRequest
3 голосов
/ 17 августа 2010

Итак, у меня есть HTML-страница.Он полон различных тегов, большинство из которых имеют сессионный GET-параметр в своем атрибуте href.Пример:

...
<a href="struct_view_distrib.asp?sessionid=11692390">
...
<a href="SHOW_PARENT.asp?sessionid=11692390">
...
<a href="nakl_view.asp?sessionid=11692390">
...
<a href="move_sum_to_7300001.asp?sessionid=11692390&mode_id=0">
...

Итак, как вы видите, sessionid одинаков, мне просто нужно получить его значение в переменной, независимо от того, из какого: x = 11692390 Я новичок в регулярных выражениях, но Googleне было полезно.Огромное спасибо!

Ответы [ 4 ]

9 голосов
/ 17 августа 2010

Это не использует регулярные выражения, но в любом случае, это то, что вы бы сделали в Python 2.6:

from BeautifulSoup import BeautifulSoup
import urlparse

soup = BeautifulSoup(html)
links = soup.findAll('a', href=True)

for link in links:
  href = link['href']
  url = urlparse.urlparse(href)
  params = urlparse.parse_qs(url.query)
  if 'sessionid' in params:
    print params['sessionid'][0]
5 голосов
/ 17 августа 2010

Разбор HTML с библиотекой синтаксического анализа DOM и использование getElementsByTagName('a') для захвата якорей, итерация по ним и использование getAttribute('href'), а затем извлечь строку. Затем вы можете использовать регулярное выражение или разделить на ?, чтобы сопоставить / получить идентификатор сеанса.

2 голосов
/ 17 августа 2010

Я бы сделал это - до того как мне сказали, что это проблема с питоном;)

<script>
function parseQString(loc) {
  var qs = new Array();
  loc = (loc == null) ? location.search.substring(1):loc.split('?')[1];
  if (loc) {
    var parms = loc.split('&');
    for (var i=0;i<parms.length;i++) {
      nameValue = parms[i].split('=');
      qs[nameValue[0]]=(nameValue.length == 2)? unescape(nameValue[1].replace(/\+/g,' ')):null; // use null or ""
    }
  }
  return qs;
}
var ids = []; // will hold the IDs
window.onload=function() {
  var links = document.links;
  var id;
  for (var i=0, n=links.length;i<n;i++) {
    ids[i] = parseQString(links[i].href)["sessionid"];
  }
  alert(ids); // remove this when happy
  // here you can do 
  alert(ids[3]); 
  //to get the 4th link's sessionid
}


</script>

<a href="struct_view_distrib.asp?sessionid=11692390">
...</a>
<a href="SHOW_PARENT.asp?sessionid=11692390">
...</a>
<a href="nakl_view.asp?sessionid=11692390">
...</a>
<a href="move_sum_to_7300001.asp?sessionid=11692390&mode_id=0">
...</a>
1 голос
/ 17 августа 2010

Ниже приведено регулярное выражение, которое вы можете использовать для сопоставления с hrefs и извлечения его значения:

\b(?<=(href="))[^"]*?(?=")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...