Python从变量类属性抓取
我试图从html列表中提取一些HREF,其中一些源代码如下:Python从变量类属性抓取,python,html,web-scraping,beautifulsoup,Python,Html,Web Scraping,Beautifulsoup,我试图从html列表中提取一些HREF,其中一些源代码如下: <ul class="sub-menu"> <li id="menu-item-4019" class="menu-item menu-item-type-post_type menu-item-object-properties menu-item-4019"><a href="http://www.universalstudentliving.com/properties/belfast/"&
<ul class="sub-menu">
<li id="menu-item-4019" class="menu-item menu-item-type-post_type menu-item-object-properties menu-item-4019"><a href="http://www.universalstudentliving.com/properties/belfast/">Belfast</a></li>
<li id="menu-item-186" class="menu-item menu-item-type-post_type menu-item-object-properties menu-item-186"><a href="http://www.universalstudentliving.com/properties/birmingham/">Birmingham</a></li>
<li id="menu-item-184" class="menu-item menu-item-type-post_type menu-item-object-properties menu-item-184"><a href="http://www.universalstudentliving.com/properties/canterbury/">Canterbury</a></li>
<li id="menu-item-4544" class="menu-item menu-item-type-post_type menu-item-object-properties menu-item-4544"><a href="http://www.universalstudentliving.com/properties/the-clink-durham/">Durham</a></li>
</ul>
但我随后意识到,菜单项对象属性菜单项xxxx的最后一位,即应代替xxxx的数字,对于每个列表项都是不同的
所以我有两个问题:
1) 给定源代码,这是获得HREF的最有效方法吗
2) 如果是,或者仅仅是为了一般知识,当类属性末尾的最后几位数字更改时,我将如何获取它们
很抱歉,如果这是重复的,我似乎无法在上面找到它。在这种特殊情况下,您可以在使用find\u all时使用regex 例如:
import re
from bs4 import BeautifulSoup
example = """<ul class="sub-menu">
<li id="menu-item-4019" class="menu-item menu-item-type-post_type menu-item-object-properties menu-item-4019"><a href="http://www.universalstudentliving.com/properties/belfast/">Belfast</a></li>
<li id="menu-item-186" class="menu-item menu-item-type-post_type menu-item-object-properties menu-item-186"><a href="http://www.universalstudentliving.com/properties/birmingham/">Birmingham</a></li>
<li id="menu-item-184" class="menu-item menu-item-type-post_type menu-item-object-properties menu-item-184"><a href="http://www.universalstudentliving.com/properties/canterbury/">Canterbury</a></li>
<li id="menu-item-4544" class="menu-item menu-item-type-post_type menu-item-object-properties menu-item-4544"><a href="http://www.universalstudentliving.com/properties/the-clink-durham/">Durham</a></li>
</ul>"""
soup = BeautifulSoup(example, "html.parser")
for o in soup.find_all('li', class_=re.compile(r'menu-item menu-item-type-
post_type menu-item-object-properties menu-item-')):
print (o.a["href"])
重新导入
从bs4导入BeautifulSoup
示例=“”
“
”
soup=BeautifulSoup(例如,“html.parser”)
对于汤中的o.find_all('li',class_=re.compile(r'菜单项菜单项类型-
post_类型菜单项对象属性菜单项-'):
打印(o.a[“href”])
输出
在这种特殊情况下,可以在使用find_all时使用正则表达式 例如:
import re
from bs4 import BeautifulSoup
example = """<ul class="sub-menu">
<li id="menu-item-4019" class="menu-item menu-item-type-post_type menu-item-object-properties menu-item-4019"><a href="http://www.universalstudentliving.com/properties/belfast/">Belfast</a></li>
<li id="menu-item-186" class="menu-item menu-item-type-post_type menu-item-object-properties menu-item-186"><a href="http://www.universalstudentliving.com/properties/birmingham/">Birmingham</a></li>
<li id="menu-item-184" class="menu-item menu-item-type-post_type menu-item-object-properties menu-item-184"><a href="http://www.universalstudentliving.com/properties/canterbury/">Canterbury</a></li>
<li id="menu-item-4544" class="menu-item menu-item-type-post_type menu-item-object-properties menu-item-4544"><a href="http://www.universalstudentliving.com/properties/the-clink-durham/">Durham</a></li>
</ul>"""
soup = BeautifulSoup(example, "html.parser")
for o in soup.find_all('li', class_=re.compile(r'menu-item menu-item-type-
post_type menu-item-object-properties menu-item-')):
print (o.a["href"])
重新导入
从bs4导入BeautifulSoup
示例=“”
“
”
soup=BeautifulSoup(例如,“html.parser”)
对于汤中的o.find_all('li',class_=re.compile(r'菜单项菜单项类型-
post_类型菜单项对象属性菜单项-'):
打印(o.a[“href”])
输出
我不知道您真正的HTML是否比您在问题中提供的HTML更复杂,但为什么要搞乱类,而不仅仅使用标记元素名称来获得您想要的结果呢 通常,您应该使用一些类名,或者更好的是使用一些ID(它们是唯一的),以便将HTML简化为您感兴趣的真实字段 但真正起神奇作用的代码是:
from bs4 import BeautifulSoup as Soup
html_str = """
<ul class="sub-menu">
<li id="menu-item-4019" class="menu-item menu-item-type-post_type menu-item-object-properties menu-item-4019">
<a href="http://www.universalstudentliving.com/properties/belfast/">Belfast</a>
</li>
<li id="menu-item-186" class="menu-item menu-item-type-post_type menu-item-object-properties menu-item-186">
<a href="http://www.universalstudentliving.com/properties/birmingham/">Birmingham</a>
</li>
<li id="menu-item-184" class="menu-item menu-item-type-post_type menu-item-object-properties menu-item-184">
<a href="http://www.universalstudentliving.com/properties/canterbury/">Canterbury</a>
</li>
<li id="menu-item-4544" class="menu-item menu-item-type-post_type menu-item-object-properties menu-item-4544">
<a href="http://www.universalstudentliving.com/properties/the-clink-durham/">Durham</a>
</li>
</ul>"""
soup = Soup(html_str, 'html.parser')
for ul in soup.find_all('ul'):
for the_href in ul.find_all('li'):
print(the_href.a.get('href'))
从bs4导入BeautifulSoup作为汤
html_str=”“”
”
soup=soup(html_str,'html.parser')
对于汤中的ul。查找所有('ul'):
对于ul.find_all('li')中的_href:
打印(href.a.get('href'))
“
我不知道您真正的HTML是否比您在问题中提供的HTML更复杂,但为什么要搞乱类,而不仅仅使用标记元素名称来获得您想要的结果呢
通常,您应该使用一些类名,或者更好的是使用一些ID(它们是唯一的),以便将HTML简化为您感兴趣的真实字段
但真正起神奇作用的代码是:
from bs4 import BeautifulSoup as Soup
html_str = """
<ul class="sub-menu">
<li id="menu-item-4019" class="menu-item menu-item-type-post_type menu-item-object-properties menu-item-4019">
<a href="http://www.universalstudentliving.com/properties/belfast/">Belfast</a>
</li>
<li id="menu-item-186" class="menu-item menu-item-type-post_type menu-item-object-properties menu-item-186">
<a href="http://www.universalstudentliving.com/properties/birmingham/">Birmingham</a>
</li>
<li id="menu-item-184" class="menu-item menu-item-type-post_type menu-item-object-properties menu-item-184">
<a href="http://www.universalstudentliving.com/properties/canterbury/">Canterbury</a>
</li>
<li id="menu-item-4544" class="menu-item menu-item-type-post_type menu-item-object-properties menu-item-4544">
<a href="http://www.universalstudentliving.com/properties/the-clink-durham/">Durham</a>
</li>
</ul>"""
soup = Soup(html_str, 'html.parser')
for ul in soup.find_all('ul'):
for the_href in ul.find_all('li'):
print(the_href.a.get('href'))
从bs4导入BeautifulSoup作为汤
html_str=”“”
”
soup=soup(html_str,'html.parser')
对于汤中的ul。查找所有('ul'):
对于ul.find_all('li')中的_href:
打印(href.a.get('href'))
“
谢谢。这是我最初尝试的,但它会从网页上的所有列表中获取所有链接!谢谢。这是我最初尝试的,但它会从网页上的所有列表中获取所有链接!