链家城市页爬虫问题:无法从<li>标签提取href属性
问题分析与解决
兄弟,我一眼就瞅出你代码里的问题啦——你搞错了href属性所在的节点!
你通过print(t)看到的<li>标签里,其实嵌套了一个<a>子标签,而href属性是属于这个<a>标签的,不是<li>本身的。所以你直接用t.get('href')去<li>节点上找,自然拿不到任何值,只会返回None。
修正后的代码方案
方案一:先定位<li>,再提取内部的<a>标签
import requests from bs4 import BeautifulSoup url1 = 'https://www.lianjia.com/city/' req1 = requests.get(url1) soup1 = BeautifulSoup(req1.content, 'html.parser') part = soup1.findAll("div",{"class":"city_province"}) for t in part[0].find_all('li'): # 找到<li>内部的<a>标签 a_tag = t.find('a') if a_tag: # 做个判断避免空节点报错 print(a_tag.get('href'))
方案二:直接定位目标<a>标签(更简洁)
既然我们要的是<a>标签的href,不如直接跳过<li>,直接定位省份区块下的所有<a>标签:
import requests from bs4 import BeautifulSoup url1 = 'https://www.lianjia.com/city/' req1 = requests.get(url1) soup1 = BeautifulSoup(req1.content, 'html.parser') # 找到第一个省份区块 first_province = soup1.find("div",{"class":"city_province"}) # 直接提取区块内所有<a>标签的href for a_tag in first_province.find_all('a'): print(a_tag.get('href'))
关键知识点提醒
- BeautifulSoup的
get()方法是获取当前节点的属性,如果属性不在当前节点上,就会返回None。 - 以后遇到这种情况,一定要右键检查页面元素,仔细确认属性到底属于哪个标签哦。
内容的提问来源于stack exchange,提问作者Zonglai Liang
相关产品推荐
相关产品推荐

