Python爬虫项目:爬虫爬取BeautifulSoup模块分析网页数据
上一篇博客介绍了用python自带urllib.request模块爬取数据和re模块运用正则表达式分析数据的过程。但是正则表达式使用相对部分初学者难以操作,那么分析网页数据还有哪些方法呢?这篇博客将使用一种第三方模块BeautifulSoup完成数据解析的过程。
Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,
因为简单,所以不需要多少代码就可以写出一个完整的应用程序。
Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。你不需要考虑编码方式,
除非文档没有指定一个编码方式,这时,Beautiful Soup就不能自动识别编码方式了。然后,你仅仅需要说明一下原始编码方式就可以了。Beautiful Soup已成为和lxml、html6lib一样出色的python解释器,为用户灵活地提供不同的解析策略或强劲的速度。
需求分析:
爬取伯乐在线网址的数据,获取列表中每一条数据的标题详情和图片地址,将信息存储到Excel表格中,并且将图片存放到本地项目路径下。
涉及到的知识点:
1.爬虫获取网页数据的过程
2.通过第三方模块BeautifulSoup匹配符合要求的标签
3.将获取到的数据(满足要求的数据)存放到容器当中
4.将容器中的数据写入到excel表格中
5.获取图片地址,将图片保存到本地磁盘
逻辑分析:
此案例中大部分的需求,在前两篇博客中以及实现过,如爬取网络数据,存放excel表格,下载网络图片等。其中解析数据使用较为简单的BeautifulSoup模块。理解掌握BeautifulSoup模块的基本用法,即可完成此需求的任务。
实现功能代码:
#导入包
import urllib.request
from bs4 import BeautifulSoup
import pyexcel_xls #存到表格,调入第三方的模块
import os
def getDataFromHtml(url,excelpath,folderpath):
#1.伪装一下
headers = {
"Accept": "application/json, text/javascript, */*; q=0.01",
"X-Requested-With": "XMLHttpRequest",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
}
req = urllib.request.Request(url,headers=headers)
#发起请求,获取响应数据
res = urllib.request.urlopen(req)
#获取响应当中的内容
#data = res.read().decode('utf-8')
#创建BeautifulSoup对象
bsoup = BeautifulSoup(res,'html.parser')
datalist = bsoup.find_all("div",{"class":"post floated-thumb"})
#打印一下列表和列表的长度 20
#遍历列表
excel_totallist = []
excel_dic = {"css121":excel_totallist}
for data_item in datalist:
#标题
title = data_item.find("div",{"class":"post-meta"}).find("a",{"class":"archive-title"}).get_text()
#详情
summary = data_item.find("div",{"class":"post-meta"}).find("span",{"class":"excerpt"}).find("p").get_text()
#图片的地址
pic = data_item.find("div",{"class":"post-thumb"}).find("img").get("src")
itemlist = [title,summary,pic]
excel_totallist.append(itemlist)
#-----------------------根据图片地址保存图片到本地的过程-------------------------------
imgname = pic.split('/')[-1]
if 'http' not in pic:
pic = "http:"+pic
#保存图片
try:
abspath = os.path.join(folderpath,imgname)
urllib.request.urlretrieve(pic,abspath)
except:
pass
#----------------------存储数据到表格当中----------------------------
# 分析:存储到表格当中的数据,长什么样子呢?
# {"css":[[title,summary,pic],[]...]}
pyexcel_xls.save_data(excelpath,excel_dic)
if __name__ == '__main__':
url = "http://web.jobbole.com/category/css/"
excelpath = "output/css.xls"
getDataFromHtml(url,excelpath,"output")
运行代码,在工程项目的output文件夹中,将下载到以下图片:
打开css.xls 获取到的数据格式为:
下载爬虫代码地址:https://download.****.net/download/u012156341/11128450
感谢您的阅读!