网络爬虫工具BeautifulSoup连载-2-入门示例
本节通过两个例子来讲述下怎么利用BeautifulSoup来获取网站上的数据,教会大家掌握BeautifulSoup的基本使用,带大家入门。
示例1
需求:获取下面网页中红线框中显示的文本信息。




解决思路:
首先用Firebug获知这块儿数据在HTML页面上所在的页面元素信息,我们发现这块儿数据位于一个id为listing的table表格内,如下,




接着获知表示这些文本信息的页面元素是什么,发现是a标签元素,并且还有元素id,如下,







同时我们还发现表格中还有一些标签为a的页面元素,但它们不是我们想要的,因为它们不含id,于是我们想到通过携带id来找a元素,从而把这些a元素排除掉。这些页面元素如下图,




代码实现:
脚本如下:parseG.py
# -*- coding: utf-8 -*-
import re
import urllib2
import sys
from bs4 import BeautifulSoup
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
 
saveout = sys.stdout
savedFile = open('release_out.log', 'a+')
sys.stdout = savedFile
 
url = r"https://ap-svnhost.xx.xxxxxx.com/WebSVN/listing.php?repname=ss&path=%2Fbranches%2F&#ad54afaef698c3acc8xxxxxxxx"
 
res = urllib2.urlopen(url)
#print res.read()
 
soup = BeautifulSoup(res, "html.parser")
entities_list = soup.find("table", {"id" : "listing"})
 
entities = entities_list.findAll(name="a", attrs = {"id" : re.compile("[a-z0-9]+")})
 
for entity in entities:
    print entity.string
 
sys.stdout = saveout
savedFile.close()
 
 
输出结果:
branches/
360/
360-dev-fileplay/
360-dev-miercom/
360-dev-roles/
360ml/

 
示例2
需求:获取下面网页中红线框中显示的商品种类信息。
 




解决思路:
首先用Firebug获知这块儿数据在HTML页面上所在的页面元素信息,我们发现这块儿数据位于一个class为shoptwoclass的div内,如下,
 




接着获知表示这些商品种类信息的页面元素是标签为a的元素。并且在div内,只有商品种类信息的页面元素是a标签。所以,我们想到可以通过标签a来找商品种类信息。

代码实现:
脚本如下:parseEshop.py
# -*- coding: utf-8 -*-
import re
import urllib2
import sys
from bs4 import BeautifulSoup
 
 
saveout = sys.stdout                                     
savedFile = open('eshop_out.log', 'a+')                           
sys.stdout = savedFile
 
url = r"http://106.15.193.218/"
 
res = urllib2.urlopen(url)
#print res.read()
 
soup = BeautifulSoup(res, "html.parser")
entities_list = soup.find("div", {"class" : "shoptwoclass"})
 
entities = entities_list.findAll(name="a")
 
for entity in entities:
    print entity.string.encode("utf-8")
    #如果使用print entity.string将会报编码错误。
 
sys.stdout = saveout                                     
savedFile.close()
 
 
输出结果:
厨房电器
电饭煲
电磁炉
电炖锅
电烤箱
焖烧锅
电蒸笼
压力锅
煮蛋器
烤面包机
微波炉
消毒柜
料理机
绞肉机
咖啡壶
烘碗机
燃气灶
榨汁机
电热水器
燃气热水器
生活电器
电水壶
电风扇
电熨斗
吸尘器
加湿器
电暖器
豆浆机
饮水机
热水瓶
保温杯
电话机
活氧机
电蚊香
空气净化器
电源插座
台灯
护理电器
电吹风
剃须刀
剃须刀配件
理发器
脱毛器
美发造型器
浴霸
修剪器
健身器材
时尚氧吧
睫毛卷翘器
健康电器
电子秤
止鼾器
助眠器
按摩器
电子血压计
座便器
大家电
电视机
空调
洗衣机
电冰箱
手机数码
手机
手机配件
数码相机
数码摄像机
录音笔
GPS导航
数码相框
MP3/4/5
数码配件
电脑网络
 U盘
鼠标
键盘
音箱
机箱
摄像头
显示器
键鼠套装
机箱电源
散热底座
耳机/耳麦
笔记本电脑

在许多情况下,我们还需要获知上下级目录文件,或类属之间的父子关系,当数据很多,且层次关系很深时,便形成了树状的数据结构。那么怎么生成并遍历树状的数据结构呢?我们会在后续章节介绍,敬请关注。

相关课程
  • 高级软件测试课程

    ¥5000元173人学习

  • 软件测试就业班全栈课程

    ¥6000元166人学习

  • 友情链接
  • 唯美谷