栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

大数据先导实践实验一

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

大数据先导实践实验一

实验一:大数据的爬取与清洗 实验内容:
从京东商城爬取笔记本电脑(也可自选其他商品)
https://list.jd.com/list.html?cat=670%2C671%2C672

货物信息,须包括商品价格p-price、商家p-shop、商品编号data-sku、商品图片(下图所示)可适当添加其他商品信息,至少爬取五页商品信息,将除图片以外的信息进行输出后存储于txt文件或excel文件中。

实验过程
  1. 首先需要了解python和HTML 的基本语法,对网页结构进行分析,然后使用python进行爬取

  2. 先安装Requests和BeautifulSoup拓展包

requests用来进行请求,BeautifulSoup用来进行对数据的清洗

  1. 使用requests.get()进行请求,respose为返回的结果

    respose = requests.get(local_url, headers=headers)
    

    一开始使用的时候并没有添加headers属性,返回为空结果,在查找资料后发现我们一般写的爬虫会默认向服务器发送爬取请求,而一般情况下网站是不允许被爬虫访问的,输出的text信息中会出现抱歉,无法访问等字眼。**我们通过更改User-Agent字段则可以实现网站请求,实现网页应答。**检查网页后添加属性

    headers = {
            'user-agent': "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Mobile Safari/537.36"
        }
    
  2. 分析后续页面的页面地址

    发现拼接page和s参数进行请求,所以在本地对后续的请求地址进行处理

        if page != 1:
            local_url = local_url + '&page=' + str(page) + '&s=' + 	str(size) + '&click=0'
    
  3. 拿到响应的数据之后,先通过对网页结构的分析发现所有的需要的查找的元素都包含在类名为gl-item的li元素下

    所以查找所有的类名为gl-item的li元素,在进行保存

    li = bf.find_all('li', class_='gl-item')
    
  4. 遍历li元素,并创建局部变量data进行数据的保存,然后对实验要求的每个数据进行分析网页结构,进行清洗

        for item in li:
            data = {}
            id = item.get('data-sku')
            name = item.find_all('div', class_='p-name')
            shop = item.find_all('div', class_='p-shop')
            price = item.find_all('div', class_='p-price')
            price = price[0].find_all('i')
            temp_shop = shop[0].find_all('span', class_='J_im_icon')
    

    在处理的过程中发现会出现爬取不到商家信息的情况出现,所以还需要对爬取不到的情况进行处理

            if len(temp_shop) == 0:
                data['shop'] = "商家信息有误!"
            else:
                data['shop'] = temp_shop[0].text
    

    图片爬取的是它的地址,之后处理商品名字,因为有的商品名字前会出现京品电脑的字样,所以需要进行处理

    name = name[0].find_all('em')
    if (name[0].text[0:4] == "京品电脑"):
         data['name'] = name[0].text[6:]
    else:
         data['name'] = name[0].text
    
  5. 打印商品信息,并将其添加到dataList数组中进行存储

            data['id'] = id
            data['price'] = price[0].text
            data['img'] = img
            print('number:', data['id'])
            print('name', data['name'])
            print('price', data['price'])
            print('shop', data['shop'])
            dataList.append(data)
    
  6. 将其封装为getdata函数,在主函数中进行调用

    if __name__ == '__main__':
        url = 'https://list.jd.com/list.html?cat=670%2C671%2C672'
        page = int(input("请输入需要爬取的页数:"))
        for i in range(1, page + 1):
            getdata(url, i, 30)
    
  7. 将爬取到的数据存入txt文件中,并添加换行符方便查看

        f = open('com.txt', 'w')
        for line in dataList:
            f.write(str(line))
            f.write('n')
        f.close()
        print("保存完毕")
    
运行结果

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/938398.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号