phthon实战计划学习:爬取商品信息

代码如下图:

phthon实战计划学习:爬取商品信息_第1张图片

运行结果如下:

phthon实战计划学习:爬取商品信息_第2张图片

疑问:1.为什么评价在字典中长度全部为0?

            2 img=soup.select('body > div:nth-of-type(2) > div > div.col-md-9 > div:nth-of-type(2) > div:nth-of-type(3) > div > img',print(img)为什么不能爬取出子节点下面的一张图片,显示为空【】

老师的回复:

1.同学,是因为image中selector中你在前面已经将div设置成nth-of-type( ) ,所以是选不住来,而你将代码改成最后一个div为nth-of-type( ) 才是可以的。

比如

image=soup.select('body > div > div > div.col-md-9 > div > div:nth-of-type(3) > div > img')

程序测试代码如下:

frombs4importBeautifulSoup

withopen('/Users/Jason/Plan-for-combating/week1/1_2/1_2answer_of_homework/index.html','r',encoding='utf-8') as wb_data:

soup=BeautifulSoup(wb_data,'lxml')

images=soup.select('body > div > div > div.col-md-9 > div > div > div > img')

image1=soup.select('body > div > div > div.col-md-9 > div > div:nth-of-type(1) > div > img')

image2=soup.select('body > div > div > div.col-md-9 > div > div:nth-of-type(2) > div > img')

image3=soup.select('body > div > div > div.col-md-9 > div > div:nth-of-type(3) > div > img')

print(images)

print(image1,image2,image3)

这样就可以抓取指定的图片链接:

phthon实战计划学习:爬取商品信息_第3张图片



鸿森老师版主

你好,这种逻辑是错误的。

comments = soup.select('body > div > div > div.col-md-9 > div > div > div > div.ratings > p > span.glyphicon.glyphicon-star')

这个代码抓取的全是的列表,总共有32个。

当你在for comment in zip()的时候,其实每一个comment不过都只是,你的值为0是因为直接使用

len(comment),comment是bs4的一个标签类型,所以你要转化为字符串才能输出长度,比如 len(str(comment))。

但整体逻辑还是错误的,按照你的方法,只能选出整个页面有多少个star,而并不能知道每一个图片下面有多少个star。

思路提供:正确的逻辑应该是选取star整个区域,也就是将上一级标签全部抓取下来,比如'body > div > div > div.col-md-9 > div > div > div > div.ratings > p > span.glyphicon.glyphicon-star'  改成 'body > div > div > div.col-md-9 > div > div > div > div.ratings > p' ,这样就可以抓到每个图片下面的star,然后再取出text来进行判断是等于glyphicon glyphicon-star 还是 等于 glyphicon glyphicon-star-empty,这样就可以知道一个图片有几个star。

5月27日

你可能感兴趣的:(phthon实战计划学习:爬取商品信息)