七夕不知道送什么?selenium帮你解决难题

1.selenium是什么?

        Selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla FirefoxSafariGoogle ChromeOpera,Edge等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .NetJavaPerl等不同语言的测试脚本

2.selenium的优点

1.因为是浏览器自动化操作,所以没有反爬机制的限制。

2.能够适应很多浏览器,包括chrome、firefox、ie等主流浏览器,同时各浏览器拥有不同的驱动程序。

3.适合动态网页的爬取,selenium使用的等待操作可以很好的适应动态网页的动态加载问题。

3.项目实战

1.爬虫代码

      目标:爬取某宝上的关于七夕的数据,少量测试,只做学习使用,主要代码(因为是刚开始使用Selenium框架,重在目标的实现,代码结构有待完善,可以整合Scrapy框架等)

import json
from typing import Text
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.options import Options

data={
    "title": {
        "text": '七夕销量和价格分析',
        "subtext": '数据来自网络'
    },
    "tooltip": {
        "trigger": 'axis',
        "axisPointer": {
            "type": 'shadow'
        }
    },
    "legend": {
        "data": ['销量', '价格']
    },
    "grid": {
        "left": '3%',
        "right": '4%',
        "bottom": '3%',
        "containLabel": "true"
    },
    "xAxis": {
        "type": 'value',
        "boundaryGap": [0, 0.01]
    },
    "yAxis": {
        "type": 'category'
    },
    "series": [
        {
            "name": '销量',
            "type": 'bar'
        },
        {
            "name": '价格',
            "type": 'bar'
        }
    ]
}
opt = Options()
# 把chrome设置成无界面模式,不论windows还是linux都可以,自动适配对应参数
opt.add_argument('--headless')
# 创建chrome无界面对象
browser = webdriver.Chrome(options=opt)
lists_name=[]
lists_sell=[]
lists_value=[]
for i in range(0,10):
    print("正在爬取第{0}页数据-----------------------".format(i))
    browser.get("https://uland.taobao.com/sem/tbsearch?keyword=%E4%B8%83%E5%A4%95&pnum={0}".format(i))
    browser.execute_script("window.scrollBy(0,4000)")
    wait = WebDriverWait(browser,10)
    element=wait.until(EC.presence_of_element_located((By.XPATH,"//ul[@class='pc-search-items-list']")))
    li=element.find_elements_by_xpath("//li[@class='pc-items-item item-undefined']")
    for item in li:
        title_text=item.find_element_by_class_name("title-text").text
        lists_name.append(title_text)
        # dict["ord_price"]=item.find_element_by_class_name("coupon-price-old").text
        newprice=item.find_element_by_class_name("coupon-price-afterCoupon").text
        lists_value.append(newprice)
        # data[""]=item.find_element_by_class_name("seller-name").text
        sell_info=item.find_element_by_class_name("sell-info").text
        lists_sell.append(sell_info.split()[1])
    print("第{0}页数据爬取完成".format(i))
browser.close()
data["yAxis"]["data"]=lists_name
data["series"][0]["data"]=lists_sell
data["series"][1]["data"]=lists_value
with open("./数据.json","a") as a:
    a.write(json.dumps(data,ensure_ascii=False))

2.HTML演示页面代码

<!--
    THIS EXAMPLE WAS DOWNLOADED FROM https://echarts.apache.org/examples/zh/editor.html?c=bar-y-category
-->
<!DOCTYPE html>
<html style="height: 2000%">
    <head>
        <meta charset="utf-8">
    </head>
    <body style="height: 100%; margin: 0">
        <div id="container" style="height: 100%"></div>

        <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/echarts@5/dist/echarts.min.js"></script>
        <!-- Uncomment this line if you want to dataTool extension
        <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/echarts@5/dist/extension/dataTool.min.js"></script>
        -->
        <!-- Uncomment this line if you want to use gl extension
        <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/echarts-gl@2/dist/echarts-gl.min.js"></script>
        -->
        <!-- Uncomment this line if you want to echarts-stat extension
        <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/echarts-stat@latest/dist/ecStat.min.js"></script>
        -->
        <!-- Uncomment this line if you want to use map
        <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/echarts@5/map/js/china.js"></script>
        <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/echarts@5/map/js/world.js"></script>
        -->
        <!-- Uncomment these two lines if you want to use bmap extension
        <script type="text/javascript" src="https://api.map.baidu.com/api?v=2.0&ak=<Your Key Here>"></script>
        <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/echarts@5/dist/extension/bmap.min.js"></script>
        -->

        <script type="text/javascript">
var dom = document.getElementById("container");
var myChart = echarts.init(dom);
var app = {};

var option;



option = //爬到的数据

if (option && typeof option === 'object') {
    myChart.setOption(option);
}

        </script>
    </body>
</html>
    

3.运行效果

 希望大家喜欢,求赞,谢谢

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值