先看第一个详情描述:
在看第二个详情描述:
显而易见:
第二个车的描述不完整
在看html:
6个红色小框框都是在一个div盒子下的(黑色框),而且一个个红色的小框框分别在一个个dl标签中;
品牌,车型,车龄,行驶里程,排量,变速箱都是在dl标签下的dt中;
而品牌,车型,车龄,行驶里程,排量,变速箱的值都是在dl标签中的dd标签中;
这里获取这一页作为演示(使用beautifulsoup):# 导入模块
import requests
from bs4 import BeautifulSoup
# url就不写在这里了
url_ = ''
# User-Agent获取自己浏览器就可以
headers={
'User-Agent': ''
}
# 发起get请求
resp = requests.get(url_,headers)
# 解码成字符串
content = resp.content.decode("utf-8")
# 创建beautifulsoup对象
bsoup = BeautifulSoup(content,'lxml')
# 取到了黑色大框框的全部内容,使用了css层级选择器, 符号>前面可以是类或id,标签名都可以
details = bsoup.select('.dec-params > dl')
爬虫之 获取浏览器的User-Agent步骤_m0_53762615的博客-CSDN博客
遍历一下黑色大框框内容:
首先打印一下类型:
第一种做法:brand = details[0].select('dd')
brand = brand[0].get_text().strip()
print(brand)
long = details[1].select('dd')
long = long[0].get_text().strip()
print(long)
#获取车龄,行驶里程,排量,变速箱类似
x = details[2].select('dd')
y = details[3].select('dd')
z = details[4].select('dd')
c = details[5].select('dd')
结果:
1.5万公里
二手轿车
这种自己写索引的方法,存在两个问题:
1:需要判断品牌,车型,车龄,行驶里程,排量,变速箱是否存在,
如果某一页只有品牌,车型,车龄,排量,变速箱,缺少行驶里程,那么要注意索引不要超过detail的最大索引,超过就会报错
2:有的顺序可以不一致,并不是每一页的都是这样的顺序:品牌,车型,车龄,行驶里程,排量,变速箱,还是需要判断
第二种做法:datas = []
data = {}
for i,j in enumerate(details):
key_ = j.select('dt')[0].get_text().replace(':','').replace(':','')
value_ = j.select('dd')[0].get_text().strip()
data[key_] = value_
datas.append(data)
结果:
只需要把dt里的内容作为key,把dd里的内容作为value,就可以不用在意顺序了!
详细版:
以上的 i 没有用到,如果要写得详细点还可以这样,这样就可以用到i:
获取title和售价就很简单,这里不做演示了



