Python实训记录 Five day

Five day

爬虫案例-当当网商品采集-书籍

爬虫该网页过程当中,要注意频繁去分析页面,以便于理解如何获取数据

地址:http://search.dangdang.com
目标:商品信息:名称、描述、价格
分析:排行、评布、价格分布、词云
存储:pickle 二进制序列化存储,效率很好,可以自定定义数据结构

模拟商品搜索功能

http://search.dangdang.com/?key=python&act=input
http://search.dangdang.com/ 域名

  • key=商品名 参数
  • act=input 固定参数

翻页:

  • http://search.dangdang.com/?key=python&act=input&page_index=100
  • page_index=页数

分析:
F12--某商品--div id

import requests # 请求
from bs4 import BeautifulSoup # 解析
import time,random # 时间、随机数字
import pickle # 序列化存储

class SpiderDangDangWang():#爬取当当网的商品信息
    def __init__(self):#初始化
        self.url = 'http://search.dangdang.com/'
        # 定制头部
        self.headers = {
            'Upgrade-Insecure-Requests': '1',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36',
            'Accept-Encoding': 'gzip, deflate',
            'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
            'Cache-Control': 'no-cache',
            'Connection': 'keep-alive',
            'Host': 'search.dangdang.com'
        }
        # 代理IP
        self.proxies = {
            'http://':'113.121.23.147:9999',
            'https://':'113.121.22.201:9999'
        } 
        self.html_list = []  
        self.data_dict = {}
        self.result = {} # 缓存页面数据
        
    def getDangDangHtml(self):#获取当当页面:书籍商品
        keywork = input("请输入搜索的商品") # 输入框
        page_index = 0 # 页面数
        result = {} # 缓存页面数据
        while True: # 死循环(翻页查询)
            page_index+=1 # 每次页数递增:+1
            resp = requests.get(url=self.url,params={'key':keywork,'act':'input','page_index':page_index},headers=self.headers,proxies=self.proxies)
            print('url-',resp.url)
            print('code-',resp.status_code) 
            self.html_list.append(resp.text) # 网页源码保存到列表  
            time.sleep(random.random()+2) # 睡眠随机时间:2~3
            if page_index == 10: # 超出10页,就自动结束
                return
        else:
            print('商品采集完毕')
            
    def parserDangDangHtml(self):#解析数据、保存数据
         for html in self.html_list:
            soup = BeautifulSoup(html,'html5lib') # 解析对象
            title = soup.title.string
            div = soup.find(name='div',attrs={'class':'con shoplist'}) # 商品最大容器
            for li in div.find_all(name='li'): # 商品的容器:li
                name = li.find(name='p',attrs={'class':'name'}) # 商品的名称
                detail = li.find(name='p',attrs={'class':'detail'}) # 商品详情
                price = li.find(name='p',attrs={'class':'price'}) # 商品价格
                star = li.find(name='p',attrs={'class':'search_star_line'}) # 商品评分
                comments = star # 商品的评论数量
                img = li.find(name='img') # 商品的图片
                if name == None and detail == None and price == None and star == None and img == None :
                    name = ''
                    detail = ''
                    price = ''
                    star = ''
                    comments = ''
                    img = ''
                else:
                    name = name.a.get('title')
                    detail = detail.text
                    price = float(price.span.text[1:]) # ¥61.40 [1:] = 61.40 
                    star = star.span.span.get('style')
                    # star = width:100%; = ['width','100%;'] = 100 /20 = 评分等级
                    star = float(star.split(':')[-1].strip('%;')) / 20
                    comments = int(comments.a.text[:-3]) # 34524条评论 = 34524
                    if img.get('data-original') == None:
                        img = img.get('src')
                    else:
                        img = img.get('data-original')                  
                print(price,star,comments,img)
                
    def svaePkl(self): # 测试读取数据
        file = open(file='%s.pkl'%(self.title),mode='wb')
        # pickle.dump 把数据转化二进制,序列化
        # pickle.load 把二进制数据转换回来,反序列化
        pickle.dump(self.result,file)
        file.flush()
        file.close()
        
    def testOpenPk1(self):#测试读取数据
        file = open(file='java-当当网.pkl',mode='rb')
        data = pickle.load(file)
        print(data)
        
    def run(self):#运行
        self.getDangDangHtml()
        self.parserDangDangHtml() 
        self.svaePkl()

数据可视化 pyecharts

模块:

  • 图表
  • 全局配置
  • 系列配置
  • 常用工具类
  • http://gallery.pyecharts.org/#/Bar3D/bar3d_base

安装:
开始 - anaconda3 prompt 终端 - 启动
输入cmd命令 :pip install pyecharts
安装成功 :successful packge pyecharts…

验证:
输入cmd命令:pip show pyecharts -i https://pypi.tuna.tsinghua.edu.cn/simple
(base) mac:~ lpf$ pip show pyecharts
Name: pyecharts
Version: 1.8.1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值