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