Python爬虫--解析网页中的元素
2016-05-27 本文已影响0人
LineWay
本次学习目的:
学会筛选所需要的信息。
解析网页的步骤:
1.使用Beautiful解析网页
Soup = BeautifulSoup(html,'lxml')
- 描述要爬取的东西在哪里
message = Soup.select()
3.从标签中获得你要的信息
1.使用BeautifulSoup解析网页
Soup = BeautifulSoup(html, 'lxml)
这一句代码的意思是,解析一个html
文件,使用lxml
这个库,在Python中,解析一个网页有多种的库,比如:html.parse
、lxml HTML
、lxml XML
和html5lib
等,选择lxml
的原因是这个库相对比较快速且稳定性较好。
2.描述要爬取的元素的位置
网页中对应元素的检查
,Copy
的格式有两种,selector
和XPath
。
区别如下:
CSS selector:body > div:nth-child(2) > div > div.col-md-9 > div:nth-child(2) > div:nth-child(1) > div > img
XPath:/html/body/div[1]/div/div[2]/div[2]/div[1]/div/img
上面两行代码是一个网页中的同一个元素的selector
和XPath
,可以看出,XPath
单纯的指出了元素所在的位置,selector
则同时标出了元素的样式。
3.筛选所需要的信息
筛选所需要的信息,在逻辑处理上进行操作即可完成,增加筛选条件即可。
示例代码:
from bs4 import BeautifulSoup
info = []
with open('index.html','r') as wb_data:
Soup = BeautifulSoup(wb_data,'lxml')
titles = Soup.select('body > div > div > div.col-md-9 > div > div > div > div.caption > h4 > a')
images = Soup.select('body > div > div > div.col-md-9 > div > div > div > img')
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:nth-of-type(2)')
for title, image, price, review, star in zip(titles, images, prices, reviews, stars):
data = {
'title': title.get_text(),
'iamge': image.get('src'),
'price': price.get_text(),
'review': review.get_text(),
# 对评分进行提取
# 每个星级都有一个class_="glyphicon glyphicon-star"
'star': len(star.find_all("span", class_="glyphicon glyphicon-star"))
}
info.append(data)
for i in info:
if i['star'] > 3:
print i['title'],i['price']
上述代码实现了从一个页面index.html
页面爬取到所需要的信息,并对结果进行筛选并打印出来。其中的难点部分是对商品的星级评分进行爬取。
上述代码中,提取标签中的文本信息使用get_text()
方法,提取图片信息使用的是get('src')
,在星级评分中使用的是find_all()
。
具体的用法可以参考BeautifulSoup的中文手册。