<h2>代码</h2>
<pre>
from bs4 import BeautifulSoup
with open('./index.html','r') as wb_data:
soup = BeautifulSoup(wb_data,'lxml')
images = soup.select('body > div > div > div.col-md-9 > div > div > div > img')
titles = soup.select('body > div > div > div.col-md-9 > div > div > div > div.caption > h4 > a')
prices = soup.select('body > div > div > div.col-md-9 > div > div > div > div.caption > h4.pull-right')
reviews = soup.select('body > div > div > div.col-md-9 > div > div > div > div.ratings > p.pull-right')
stars = soup.select('body > div > div > div.col-md-9 > div > div > div > div.ratings > p > span')
#stars = soup.find_all('span',class_='glyphicon-star')
print(stars)
print(images,titles,prices,reviews,stars,sep='\n--------------------\n')
print(len(stars),len(images))
for image,title,price,review,star in zip(images,titles,prices,reviews,stars):
data = {
'image':image.get('src'),
'title':title.get_text(),
'price':price.get_text(),
'review':review.get_text(),
'star':len(star),
}
print(data)
</pre>
<h2>成果</h2>
<h2>总结</h2>
改作业的主要目标是爬取一个本地网页中的相关信息。
主要的步骤有:
1.加载这个本地网页。这里用到了with open(还不太懂!)
2.利用BeautifulSoup解析这个网页的内容
3.利用浏览器的“检查”功能,定位要爬取数据的标签并加以整理
4.提取这些信息并利用for循环整理到字典中,并打印出来
<h2>反思</h2>
本次作业主要有两个问题:
1.对于with这个语法还不了解。
2.要爬取的数据中,星级比较难以处理,在网页文件中,几颗星是这样表示的:
<pre>
class="glyphicon glyphicon-star"
class="glyphicon glyphicon-star-empty" #共有5条这样的语句,有几个无“empty”就代表几颗星。
</pre>
老师给出的方法是:
<pre>
stars = soup.select("body > div > div > div.col-md-9 > div > div > div > div.ratings > p > span")
stars_count = len(star)
"star": stars_count
</pre>
但结果是,字典中的star都是0。我认为循环没有将每一个商品的星级给提取出来。stars包括了所有的星级,然后len对其计数。目前我还没有找到合适的解决办法。
我尝试使用find_all来提取数据,能够做到只提取class="glyphicon glyphicon-star" 。但是并没有用。
<pre>
stars = soup.find_all('span',class_='glyphicon-star')
</pre>
不过也算是Get了一个新知识点吧。