2017-08-28 28 views
0

找到所有的<ul>后,我想进一步提取文字和href的。我对这一点HTML所特别关注的问题是,我需要大部分,但不是页面中的所有<li>项目。我看到当我find_all(),我返回一个列表对象,它不允许我进一步导航它作为汤对象。
例如,在下面的代码片段,最终创造{'cityName': 'href',}一本字典,我曾尝试:是否有替代bs4的find_all()方法返回另一个汤对象,而不是一个列表,为进一步导航?

city_list = soup.find_all('ul', {'class': ''}) 
city_dict = {} 
for city in city_list: 
    city_dict[city.text] = city['href'] 

下面是示例最小HTML:

<h4>Alabama</h4> 
<ul> 
<li><a href="https://auburn.craigslist.org/">auburn</a></li> 
<li><a href="https://bham.craigslist.org/">birmingham</a></li> 
<li><a href="https://tuscaloosa.craigslist.org/">tuscaloosa</a></li> 
</ul> 
<h4>Alaska</h4> 
<ul> 
<li><a href="https://anchorage.craigslist.org/">anchorage/mat-su</a></li> 
<li><a href="https://juneau.craigslist.org/">southeast alaska</a></li> 
</ul> 
<h4>Arizona</h4> 
<ul> 
<li><a href="https://flagstaff.craigslist.org/">flagstaff/sedona</a></li> 
<li><a href="https://yuma.craigslist.org/">yuma</a></li> 
</ul> 
<ul> 
<li><a href="https://www.craigslist.org/about/help/">help</a></li> 
<li><a href="https://www.craigslist.org/about/scams">safety</a></li> 
<li class="fsel mobile linklike" data-mode="regular">desktop</li> 
</ul> 

我如何,本质上,find_all()ul的第一个,然后进一步发现只有li的那个我感兴趣?

+0

'的( 'UL')UL在soup.find_all:#做一些与ul是汤对象找到你想要的东西...'? –

回答

0

也许你需要的是这样的:

city_dict = {} 
for ul in soup.find_all('ul', {'class': ''}): 
    state_name = ul.find_previous_sibling('h4').text 
    print(state_name) 
    for link in ul.find_all('a'): 
     print(link['href']) 
+0

我不认为亚利桑那州与安全信息:) –

+0

这只是一个例子,你需要详细说明自己:) –

+1

可以做的:'{h4.string:{a.string:a ['href'] for一个在h4.find_next('ul')。select('li a')}为h4在soup.select('h4')}'根据结构的细微差别... –

0

试试这个,感谢我后来:)

list_items = soup.find_all('ul',{'class':''}) 
list_of_dicts = [] 
for item in list_items: 
    for i in item.find_all('li'): 
     new_dict = {i.text:i.a.get('href')} 
     list_of_dicts.append(new_dict) 
+0

大概你的意思是'为我在item.find_all'在那里? –

+0

@ Jon Clements对..对不起错字... :) – Abhijeetk431

0
city_dict = {} 
for li in soup.find_all('li'): 
    city_name = li.text 
    for link in li.find_all('a'): 
     city_dict[city_name] = link['href'] 
相关问题