使用Python从代码块中提取href ID

时间:2014-12-24 03:07:17

标签: python html parsing beautifulsoup html-parsing

从下面的代码中,我想定位href并收集链接末尾的ID号,将该号码设置为名为" VARIABLE"的变量。 (在这段代码中,数字将是" 2019786")。我已经在我的程序中使用了收集页面的请求,我也导入了BeautifulSoup4。此外,这段代码可能会在页面之间发生变化,从而改变了href ID号,因此我在考虑收集此号码时,请使用以下内容:

/d2l/lp/ouHome/home.d2l?ou =%

<a class="d2l-link d2l-outline d2l-left" href="/d2l/lp/ouHome/home.d2l?ou=2019786" title="Enter CHEM-1315-018 - Lab-CHEM 1315-001">CHEM-1315-018 - Lab-CHEM 1315-001</a>

先谢谢杰克逊

2 个答案:

答案 0 :(得分:0)

如果URL的模式相同,您可以使用BeautifulSoup和一个简单的正则表达式来获取id。

代码看起来像这样:

from bs4 import BeautifulSoup
import re

text = """<a class="d2l-link d2l-outline d2l-left" href="/d2l/lp/ouHome/home.d2l?ou=2019786" title="Enter CHEM-1315-018 - Lab-CHEM 1315-001">CHEM-1315-018 - Lab-CHEM 1315-001</a>"""
soup = BeautifulSoup(text)
href_link = soup.a['href']
match = re.search(r'ou=(\d*)', href_link)
if match:
    print int(match.group(1)) # do whatever you want with it here
else:
    print "no id found"

请注意,您无需指定整个网址来获取ID,因为在“ou =”之后,ID始终会作为参数发送。

答案 1 :(得分:0)

您可以声明匹配href属性值的模式:

pattern = re.compile(r'^/d2l/lp/ouHome/home\.d2l\?ou=(\d+)')

(如果网址本身也是变量,请将正则表达式更改为ou=(\d+)

并在find()和之后使用它来提取ou值:

import re
from bs4 import BeautifulSoup

data = '<a class="d2l-link d2l-outline d2l-left" href="/d2l/lp/ouHome/home.d2l?ou=2019786" title="Enter CHEM-1315-018 - Lab-CHEM 1315-001">CHEM-1315-018 - Lab-CHEM 1315-001</a>'

soup = BeautifulSoup(data)

pattern = re.compile(r'^/d2l/lp/ouHome/home\.d2l\?ou=(\d+)')
link = soup.find('a', class_='d2l-link', href=pattern)

print pattern.search(link['href']).group(1)

打印:

2019786

(\d+)这里是一个匹配一个或多个数字的capturing group