1.从a标签下获取内容,是string
#角色
'''
<p class="pActor">主演:
<a target="_blank" href="//dianying.2345.com/list/---ZHANGYI5---.html" title="张译">张译</a>
<a target="_blank" href="//dianying.2345.com/list/---HUANGJINGYU---.html" title="黄景瑜">黄景瑜</a>
<a target="_blank" href="//dianying.2345.com/list/---HAIQING---.html" title="海清">海清</a></p>
'''
actors=li.find('p',attrs='pActor')
act=''
for actor in actors:
act+=actor.string+' '
2.从<p>标签下获取内容,是text
#介绍
'''
<p class="pTxt pIntroShow">简介:作为远达建筑公司的副总监杨维(王健饰),
工作上处处受到上级和同事的打压,家庭中妻子(王妍饰)对其也不尊重。各种的压迫下,导致杨维走上歧途。
将周燕(吕小漫饰)、白亚楠(徐艺涵饰)、沈美玲(刘雨晴饰)分别抓到自己的地窖中,将其虐待......地窖外面
,三位女性的亲人苦苦寻找,白亚楠的父亲白景山(梁岩饰)和周燕...
<a href="javascript:void(0);" target="_self" class="aMore pIntroShowMore">展开全部 <i class="iconfont"></i></a></p>
'''
instroture=li.find('p',attrs={'class':'pTxt pIntroShow'}).text
print (instroture)
3.
python爬虫报错 AttributeError: 'NoneType' object has no attribute 'text',这是
time=li.find('span',attrs={'class':'sIntro'}).text,整个html中没有span 这种类型
这种情况下try except,说明情况即可:
try:
time=li.find('span',attrs={'class':'sIntro'}).text
print (time)
except:
print ('还没上映')
4.python的路径问题
requests.exceptions.MissingSchema: Invalid URL '//imgwx2.2345.com/dypcimg/img/8/65/sup196226_223x310.jpg?1525231260': No schema supplied. Perhaps you meant http:imgwx2.2345.com/dypcimg/img/8/65/sup196226_223x310.jpg?1525231260?
将路径前加上‘http:’
#下载图片
with open('C:testdata/image/'+name+'.png','wb+') as f:
f.write(requests.get('http:'+img_src).content)
5.获取span标签下的a标签下的内容:
#获取影片的名字
'''
<span class="sTit"><a href="//dianying.2345.com/detail/195766.html" target="_blank">妈妈咪鸭</a></span>
'''
name=li.find('span',attrs={'class':'sTit'}).a.text
#print (name)
6.这个问题真的是需要初学者注意,因为没有系统的学习,很多问题只能是自己去碰
首先获取对象的方法是soup.find('标签','属性')
获取的集合方法是soup.find_all('标签','属性')
<ul class="area_three area_list" id="rankList">
<li class="vitem J_li_toggle_date " name="dmvLi">
</li>
<li class="vitem J_li_toggle_date " name="dmvLi">
</li>
</ul>
当我们获取对象时:
ul=soup.find('ul',attrs={'class':'area_three area_list'})
我们是可以遍历的:
for li in ul:
#print (li)
name=li.find('a',attrs={'class':'mvname'}).text
print (name)
但是这时就会报错:
name=li.find('a',attrs={'class':'mvname'}).text
TypeError: find() takes no keyword arguments
但是html中确实是有的!!!
怎样解决呢??? 这里就是要提到find_all这个方法了,只有find_all获取的方法,才能遍历从中获取数据!!!!
这样:
#获取对象
ul=soup.find('ul',attrs={'class':'area_three area_list'})
#获取集合
li_list=ul.find_all('li',attrs={'name':'dmvLi'})
for li in li_list:
#print (li)
name=li.find('a',attrs={'class':'mvname'}).text
print (name)
这样就能获取到了
7.按属性查询,和直接查询
<div class="score_box">
<h3 class="asc_score">35.83</h3>
<p class="asc-data clearfix">
<em class="score-asc"></em>
<span class="asc-num">+0.658</span>
</p>
</div>
我们这样查询不到!!
time=li.find('h3',attrs={'class':'asc_score'}).text
这有一层一层的属性查询
sco=li.find('div',attrs={'class':'score_box'}).h3.text