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.csdn.net/download/u012156341/11128450

感谢您的阅读!

猜你喜欢

转载自blog.csdn.net/u012156341/article/details/89397141