如何从<a> tag, from the full html text</a>中提取url GET参数

时间:2010-08-17 09:05:52

标签: python html regex

所以我有一个HTML页面。它充满了各种标签,大多数都在其href属性中有sessionid GET参数。例如:

...
<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 我是正则表达式的新手,但谷歌没有帮助。很多!

6 个答案:

答案 0 :(得分:9)

这不使用正则表达式,但无论如何,这是你在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]

答案 1 :(得分:5)

使用DOM解析库解析HTML并使用getElementsByTagName('a')来获取锚点,迭代它们并使用getAttribute('href')然后提取字符串。然后,您可以在?上使用正则表达式或拆分来匹配/检索会话ID。

答案 2 :(得分:2)

我会这样做 - 在我被告知这是一个python问题之前;)

<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>

答案 3 :(得分:1)

以下是可用于匹配href并提取其值的正则表达式:

\b(?<=(href="))[^"]*?(?=")

答案 4 :(得分:1)

bs4 4.7.1。+具有为此所需的所有功能。使用css AND语法结合time.sleep(*)来指定仅带参数sessionid的url和select_one以限制为第一个匹配,然后在该参数上分割并获取未绑定的数组值

logger.info()

答案 5 :(得分:0)

受AbdealiJK启发的完整Python3示例:

response = """...
<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">
..."""

from bs4 import BeautifulSoup
import urllib.parse
soup = BeautifulSoup(response, "lxml")
for i in soup.find_all('a', href=True):
    try:
        print(urllib.parse.parse_qs(urllib.parse.urlparse(i['href']).query)["sessionid"])
    except:
        pass