从下面的代码中,我想定位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>
先谢谢杰克逊
答案 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。