目录

准备工具python + Selenium

使用Selenium打开《率土之滨》藏宝阁主页

爬取第一个商品的信息

收集武将数量,战法数量,宝物数量

收集价格、收藏人数、客户端类型、典藏数量、战法名称

收集武将信息

保存收集的数据

爬取多个商品的信息


本文演示如何使用Selenium爬取《率土之滨》藏宝阁账号信息(武将数量,武将姓名,战法数量,宝物数量,价格,收藏数量等等),因为不同的信息需要进行各种点击才能获取,因此需要使用动态网页自动化工具Selenium。本文仅供个人学习,不做商业用途。

准备工具python + Selenium

这部分并非本文重点,Selenium安装及使用教程请参考:Python Selenium库的使用_凯耐的博客-CSDN博客_python selenium

使用Selenium打开《率土之滨》藏宝阁主页

本次演示的是使用的是火狐浏览器(使用别的浏览器也行)。

from selenium import webdriver
browser = webdriver.Firefox()
browser.get('https://stzb.cbg.163.com/cgi/mweb/pl/role?view_loc=all_list')

接下来,火狐浏览器就能自动打开《率土之滨》藏宝阁主页,发现需要进行账号登陆,此时可以手动输入账号密码登陆也可以自动登录。

输入账号密码登陆之后藏宝阁的商品列表就出现在网页中了。

爬取第一个商品的信息

点击审查元素,查看点击第一商品的区域,然后使用click()函数自动点击进入第一个商品。

browser.find_element_by_xpath('//div[@class="infinite-scroll list-block border"]/div/div/div[1]').click()xmlps = etree.HTML(browser.page_source) # 保存页面xml

收集武将数量,战法数量,宝物数量

找到显示武将数量,战法数量,宝物数量的区域,打开审查元素。

找到div标签 class=list-item product-item product-item-cards 以及 ul标签class=attrs tof就能定位到武将数量,战法数量,宝物数量的区域。

count0 = xmlps.xpath('//div[@class="list-item product-item product-item-cards"]//ul[@class="attrs tof"]/li/text()')
counts = re.findall("\d+",str(count0))  # 找出字符串中的数字
WJcount = int(counts[0])  # 第一个数字代表武将数量
ZFcount = int(counts[1])  # 第二个数字代表战法数量
if counts.__len__()==2:   # 第三个数字代表宝物数量BWcount = 0
else:BWcount = counts[2]

收集价格、收藏人数、客户端类型、典藏数量、战法名称

基本上是按照上述方法

# 价格
Price = xmlps.xpath('//div[@class="list-item product-item product-item-cards"]//div[@class="price-wrap"]/div[@class="price icon-text"]/span/text()')
#收藏人数
Favorites = xmlps.xpath('//div[@class="list-item product-item product-item-cards"]//span[@class="collect pull-right"]/text()')
# 客户端
Port = browser.find_element_by_xpath('//div[@class="color-gray"]/span[2]').get_attribute('class')
# 典藏数量
browser.find_element_by_xpath('//div[@class="hair-tab"]/div/a[5]').click()
xmlps = etree.HTML(browser.page_source)
DCcount = xmlps.xpath('//div[@class="content"]//div[@class="product-content content-dian-cang"]/ul/li[@class="tab-item selected"]/text()')
# 战法名字
browser.find_element_by_xpath('//div[@class="hair-tab"]/div/a[3]').click()
xmlps = etree.HTML(browser.page_source)
ZFname = xmlps.xpath('//div[@class="product-content content-card-extend"]/div[@class="module"]/ul[@class="skills"]/li/p[2]/text()')

收集武将信息

收集武将信息稍微有些不同,武将信息包括武将名字、所属势力以及进阶数量,而且不同账号拥有的武将总数也不一样。需要通过一个循环获取账号中的武将信息。

browser.find_element_by_xpath('//div[@class="hair-tab"]/div/a[1]').click()
xmlps = etree.HTML(browser.page_source)
shili = list()  # 武将所属势力
WJname = list() # 武将名字
WJStars = list() #武将进阶数量
for i in range(WJcount):j = i+1shili0 = xmlps.xpath('//div[@class="cards"]/div[1]/ul/li[%d]//div[@class="wrap"]/div[2]/i/text()'% j)WJname0 = xmlps.xpath('//div[@class="cards"]/div[1]/ul/li[%d]/div/div[@class="name tC"]/text()'% j)WJname0 = [XX.replace('\n','') for XX in WJname0] #去除\nWJname0 = [XX.strip() for XX in WJname0]WJStars0 = xmlps.xpath('count(//div[@class="cards"]/div[1]/ul/li[%d]//div[@class="stars"]/div[@class="stars-wrap"]/span[@class="star up"])'% j)shili.append(shili0)WJname.append(WJname0)WJStars.append(WJStars0)

保存收集的数据

最后把所有收集的数据放到一个列表中,然后保存为json文件。

ACCOUNT0 = list()
ACCOUNT0.append(counts)
ACCOUNT0.append(Price)
ACCOUNT0.append(Favorites)
ACCOUNT0.append(Port)
ACCOUNT0.append(DCcount)
ACCOUNT0.append(shili)
ACCOUNT0.append(WJname)
ACCOUNT0.append(WJStars)
ACCOUNT0.append(ZFname)

爬取多个商品的信息

需要通过鼠标进行下滑操作才能展开多个商品的信息(这个是可以通过Selenium实现的),下面贴出完整代码。

from selenium import webdriver
import lxml.etree as etree
import re
import json
import os
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import numpy as np
import pandas as pdbrowser = webdriver.Firefox()
browser.get('https://stzb.cbg.163.com/cgi/mweb/pl/role?view_loc=all_list')
#滑到底部 获取账号总数
Accounts_num = 0
for i in range(40):# js="window.scrollTo(0,document.body.scrollHeight)"browser.execute_script('window.scrollTo(0,1000000)')xmlps = etree.HTML(browser.page_source)Accounts_num0 = xmlps.xpath('count(//div[@class="infinite-scroll list-block border"]/div/div/div[@class="product-item product-item-cards list-item list-item-link"])')print('Accounts_num0:',Accounts_num0)print('Accounts_num:',Accounts_num)if Accounts_num0 > Accounts_num :Accounts_num = Accounts_num0else:breaktime.sleep(0.45)# 收集一个账号信息的函数
def getDATA(index):browser.find_element_by_xpath('//div[@class="infinite-scroll list-block border"]/div/div/div[%d]' % index).click()# xmlps = etree.HTML(browser.page_source)# 测试网页是否加载完毕try:element = WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.XPATH, '//div[@class="list-item product-item product-item-cards"]')))xmlps = etree.HTML(browser.page_source)finally:print('网页加载完毕')# 武将数量,战法数量,宝物数量count0 = xmlps.xpath('//div[@class="list-item product-item product-item-cards"]//ul[@class="attrs tof"]/li/text()')print(count0)counts = re.findall("\d+", str(count0))WJcount = int(counts[0])ZFcount = int(counts[1])if counts.__len__() == 2:BWcount = 0else:BWcount = counts[2]# 价格Price = xmlps.xpath('//div[@class="list-item product-item product-item-cards"]//div[@class="price-wrap"]/div[@class="price icon-text"]/span/text()')# 收藏人数Favorites = xmlps.xpath('//div[@class="list-item product-item product-item-cards"]//span[@class="collect pull-right"]/text()')# ios 或者 AndroidPort = browser.find_element_by_xpath('//div[@class="color-gray"]/span[2]').get_attribute('class')print(Port, index)# 出售剩余时间RestDays = xmlps.xpath('//div[@class="ft clearfix"]/p//span/text()')# 抓取武将卡牌数据# browser.find_element_by_xpath('//div[@class="hair-tab"]/div/a[1]').click()# xmlps = etree.HTML(browser.page_source)shili = list()WJname = list()WJStars = list()for ji in range(WJcount):j = ji + 1shili0 = xmlps.xpath('//div[@class="cards"]/div[1]/ul/li[%d]//div[@class="wrap"]/div[2]/i/text()' % j)WJname0 = xmlps.xpath('//div[@class="cards"]/div[1]/ul/li[%d]/div/div[@class="name tC"]/text()' % j)WJname0 = [XX.replace('\n', '') for XX in WJname0]  # 去除\nWJname0 = [XX.strip() for XX in WJname0]WJStars0 = xmlps.xpath('count(//div[@class="cards"]/div[1]/ul/li[%d]//div[@class="stars"]/div[@class="stars-wrap"]/span[@class="star up"])' % j)shili.append(shili0)WJname.append(WJname0)WJStars.append(WJStars0)# 战法名字browser.find_element_by_xpath('//div[@class="hair-tab"]/div/a[3]').click()xmlps = etree.HTML(browser.page_source)ZFname = xmlps.xpath('//div[@class="product-content content-card-extend"]/div[@class="module"]/ul[@class="skills"]/li/p[2]/text()')# 典藏数量browser.find_element_by_xpath('//div[@class="hair-tab"]/div/a[5]').click()xmlps = etree.HTML(browser.page_source)DCcount = xmlps.xpath('//div[@class="content"]//div[@class="product-content content-dian-cang"]/ul/li[@class="tab-item selected"]/text()')ACCOUNT0 = list()ACCOUNT0.append(counts)ACCOUNT0.append(Price)ACCOUNT0.append(Favorites)ACCOUNT0.append(Port)ACCOUNT0.append(RestDays)ACCOUNT0.append(DCcount)ACCOUNT0.append(shili)ACCOUNT0.append(WJname)ACCOUNT0.append(WJStars)ACCOUNT0.append(ZFname)# 数据保存index = index + numAccountwith open('data003/account%d.json' % index, 'w') as Account:json.dump(ACCOUNT0, Account)print("第%d个数据保存完毕" % index)browser.back()  #返回前一个网页time.sleep(0.2) #等待网页加载时间# 通过循环获取多个账号信息
for i in range(Accounts_num):index = i + 1getDATA(index)

收集完数据之后,就可以进行数据分析,例如使用随机深林分析、XGBoost、线性回归等方法分析不同的武将的价值:使用随机森林与Xgboost回归对手游《率土之滨》账号进行价格预测。

使用python+Selenium动态爬取《率土之滨》藏宝阁账号信息相关推荐

  1. python+selenium+phantomJS爬取国家地表水水质自动监测实时数据发布系统——动态网页爬虫

    一.关于phantomjs 1.介绍 PhantomJS是一个为自动化而生的利器,它本质上是一个基于webkit内核的无界面浏览器,并可使用JavaScript或CoffeeScript进行编程.由于 ...

  2. [转载] python+selenium定时爬取丁香园的新冠病毒每天的数据,并制作出类似的地图(部署到云服务器)

    参考链接: Python vars() python+selenium定时爬取丁香园的新冠病毒每天的数据,并制作出类似的地图(部署到云服务器) 声明:仅供技术交流,请勿用于非法用途,如有其它非法用途造 ...

  3. python+selenium定时爬取丁香园的新冠病毒每天的数据,并制作出类似的地图(部署到云服务器)

    python+selenium定时爬取丁香园的新冠病毒每天的数据,并制作出类似的地图(部署到云服务器) 声明:仅供技术交流,请勿用于非法用途,如有其它非法用途造成损失,和本博客无关 目录 python ...

  4. python + selenium多进程爬取淘宝搜索页数据

    python + selenium多进程爬取淘宝搜索页数据 1. 功能描述 按照给定的关键词,在淘宝搜索对应的产品,然后爬取搜索结果中产品的信息,包括:标题,价格,销量,产地等信息,存入mongodb ...

  5. python + selenium +chrome爬取qq空间好友说说并存入mongodb数据库

    python + selenium +chrome爬取qq空间好友说说并存入mongodb数据库 准备阶段 在正式开始在前需要先准备好做爬虫的工具,本例使用chrome无头浏览器进行爬取工作,也可使用 ...

  6. Python爬虫项目--爬取某宝男装信息

    本次爬取用到的知识点有: 1. selenium 2. pymysql 3  pyquery ''' 文章:Python爬虫项目--爬取某宝男装信息 作者:Star_Zhao 源自:https://w ...

  7. python+scrapy简单爬取淘宝商品信息

    python结合scrapy爬取淘宝商品信息 一.功能说明: 已实现功能: 通过scrapy接入selenium获取淘宝关键字搜索内容下的商品信息. 待扩展功能: 爬取商品中的全部其他商品信息. 二. ...

  8. selenium框架爬取p2p问题平台信息,需加载点击页面的。

    @TOC selenium框架爬取p2p问题平台信息 # -*- coding: utf-8 -*- """ Created on Tue Dec 10 07:03:57 ...

  9. Windows下利用python+selenium+firefox爬取动态网页数据(爬取东方财富网指数行情数据)

    由于之前用urlib和request发现只能获取静态网页数据,目前爬取动态网页有两种方法, (1)分析页面请求 (2)Selenium模拟浏览器行为(霸王硬上弓),本文讲的就是此方法 一.安装sele ...

最新文章

  1. 2021年大数据Flink(一):乘风破浪的Flink-Flink概述
  2. WP7 开发(十) 处理Html标记
  3. c++根据二叉树的层次遍历建立二叉树_LeetCode | 102.二叉树的层次遍历
  4. 【chorme插件开发】第三节:开发html的展示类型插件实例
  5. 微软设计套装 Expression Studio 4 (Ultimate+Web Pro+Encoder Pro) 最新版下载
  6. android蓝牙设置特征属性,Android BLE蓝牙详细解读(二)
  7. Log4J日志配置详解3
  8. 计算机专业的书普遍都这么贵,你们都是怎么获取资源的?
  9. 用ifconfig命令,只有lo,没有eth0的解决方案
  10. 软件工程课程周学习进度报告——第六周
  11. xv6 syscall实验
  12. 【Linux】Cachecloud安装部署图文并茂
  13. excel转置怎么操作_Excel----选择性粘贴,工作中必须学会的技能
  14. MySql领域经典之作,“不敢自诩为MySql专家,mybatis架构设计及源码分析系列
  15. 模式识别与智能系统和计算机视觉,模式识别与智能系统(论文).docx
  16. 入侵检测工具AIDE极简教程
  17. 阿里云各种API如何使用
  18. 程序设计算法竞赛高级——练习1解题报告
  19. mysql数据库热备份_mysql数据库热备份
  20. 5G网络学习(三)——大白话讲解PDU会话(未完待续)

热门文章

  1. js reduce 累加数组里对象某个属性的和 NaN
  2. 荣耀30可以升级鸿蒙系统,惊喜!荣耀手机也能升鸿蒙:这5款机型用户有福了
  3. Hadoop笔记02-Hadoop-HDFS
  4. 线性代数之——四个基本子空间
  5. LeetCode 1823. 找出游戏的获胜者
  6. STM32HAL库-移植mbedtls开源库示例(一)
  7. 基于SPI接口的OLED数据显示
  8. pro缺点和不足 一加7t_一加7T与OPPO Reno Ace 各有优势与缺点
  9. 使用jol查看对象内部布局
  10. c语言-求两个数的最小公倍数