• Python实训-15天-博客汇总表

目录

1、网络爬虫-课后练习题

1.1、写法1

1.2、写法2

2、Selenium自动化测试工具

2.1、安装工具

2.2、命令行操作


  1. 直接爬取HTML (30%)
  2. 爬取数据接口(50%)
  3. Selenium爬取(既没有HTML内容,也没找到合适的数据接口)(20%)【入门】 【验证、校验等信息】

今天:

  1. Selenium 自动测试(爬虫)工具;
  2. 启动浏览器,按照真实的用户操作和用户所见,提取网页数据。

1、网络爬虫-课后练习题

爬虫技巧 + 基础编程能力(对数据的处理)

课后习题:爬取并分析汽油价格

网址:东方财富网-油价模块   https://data.eastmoney.com/cjsj/oil_default.html
    
要求:
1、爬取所有汽油价格变动信息(2000-06-06至今)
2、一共涨价多少次,降价多少次
3、哪个时间段油价是最便宜的 (开始和结束的年月日)
4、哪个时间段油价是最贵的(开始和结束的年月日)
5、油价停留在2000-3000元之间的有多长时间(天数)

(一小时内,看是否能完成)

提示:
接口地址:
https://datacenter-web.eastmoney.com/api/data/get?type=RPTA_WEB_YJ_BD&sty=ALL&st=dim_date&sr=-1&p=2&ps=10
    #2为页码

1.1、写法1

'''
爬取并分析汽油价格
网址:东方财富网 - 油价模块 https://data.eastmoney.com/cjsj/oil_default.html
要求:
1.爬取所有汽油价格变动信息(2000-06-06~至今)。
2.一共涨价多少次,降价多少次。
3.哪个时间段油价是最便宜的(开始和结束的年月日)。
4.哪个时间段油价是最贵的(开始和结束的年月日)。
5.油价停留在2000-3000元之间的有多长时间(天数)。
'''
import requests as req
import json
import datetimehds = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36'}
url = 'https://datacenter-web.eastmoney.com/api/data/get?type=RPTA_WEB_YJ_BD&sty=ALL&st=dim_date&sr=-1&p={}&ps=10';infos = [];# 1.爬取所有汽油价格变动信息(2000-06-06~至今)。
for i in range(23):resp = req.get(url.format(i + 1), headers=hds)ls = json.loads(resp.content.decode('utf-8'))['result']['data'];for l in ls:r = [l['dim_date'], l['value'], l['qy_fd']];  # ['2021-07-13 00:00:00',8120,70] ;infos.append(r);print(len(infos))
print(infos)infos[-1][2] = 0;  # 将最后一个None值,设为0
# ['2022-01-01 00:00:00', 8130,  140], ['2021-12-18 00:00:00', 7990, -130],
# ['2021-12-04 00:00:00', 8120, -430], ['2021-11-20 00:00:00', 8550, -95],
# ['2021-10-23 00:00:00', 8645,  300], ['2021-10-10 00:00:00', 8345, 345]# filter来实现也可以
ct_up = 0;
ct_down = 0;for info in infos:if info[2] > 0:ct_up = ct_up + 1;elif info[2] < 0:ct_down = ct_down + 1;# 2.一共涨价多少次,降价多少次。
print('涨价次数:', ct_up)
print('降价次数:', ct_down)ps = [x[1] for x in infos];  # 将所有的油价提取出来# 3.哪个时间段油价是最便宜的(开始和结束的年月日)。
minprice = min(ps);  # 找到油价最低的值
print('最低价:', minprice);
print('最低价日期范围:', end='')
for i, info in enumerate(infos):  # 既能得到下标i,又能得到元素本身if info[1] == minprice:if i == 0:  # 更严谨print(info[0], '~ 至今');else:print(info[0], '~', infos[i - 1][0]);# 4.哪个时间段油价是最贵的(开始和结束的年月日)。
maxprice = max(ps);  # 找到油价最高的值
print('最高价:', maxprice);
print('最高价日期范围:', end='')
for i, info in enumerate(infos):  # 既能得到下标i,又能得到元素本身if info[1] == maxprice:if i == 0:  # 更严谨print(info[0], '~ 至今');else:print(info[0], '~', infos[i - 1][0]);def days(startstr, endstr):start = datetime.datetime.strptime(startstr[:10], '%Y-%m-%d').date();end = datetime.datetime.strptime(endstr[:10], '%Y-%m-%d').date();return (end - start).days;# 5.油价停留在2000-3000元之间的有多长时间(天数)。
infos.reverse();  # 倒序
# print(infos)
totalsum = 0;
for i, info in enumerate(infos):if info[1] >= 2000 and info[1] <= 3000:ds = days(info[0], infos[i + 1][0]);totalsum = totalsum + ds;print('总天数:', totalsum);# 有思路(编程思维) + 有办法(积极百度)

1.2、写法2

'''
爬取并分析汽油价格
网址:东方财富网 - 油价模块 https://data.eastmoney.com/cjsj/oil_default.html
要求:
1.爬取所有汽油价格变动信息(2000-06-06~至今)。
2.一共涨价多少次,降价多少次。
3.哪个时间段油价是最便宜的(开始和结束的年月日)。
4.哪个时间段油价是最贵的(开始和结束的年月日)。
5.油价停留在2000-3000元之间的有多长时间(天数)。
'''
import datetime
import json
import sysimport requestsdef daytime(str1, str2):d1 = datetime.date(int(str1[0:4]), int(str1[5:7]), int(str1[8:10]))d2 = datetime.date(int(str2[0:4]), int(str2[5:7]), int(str2[8:10]))return (d1 - d2).days# 爬取数据接口,得到数据
hds = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36'}url = 'https://datacenter-web.eastmoney.com/api/data/get?callback=&type=RPTA_WEB_YJ_BD&sty=ALL&st=dim_date&sr=-1&token=894050c76af8597a853f5b408b759f5d&p=1&ps=250&source=WEB&_=1641888888471'resp = requests.get(url, headers=hds)ct = resp.content.decode('utf-8')ct = json.loads(ct)
ls = list(ct["result"]["data"])
ls = list(reversed(ls))
# print(ls)count_rise = 0
count_drop = 0qy_expensive = -sys.maxsize - 1
qy_cheap = sys.maxsizefor i in ls:print('时间:' + str(i['dim_date']) + '汽油价格:' + str(i['value']))if i['qy_fd'] is not None:if i['qy_fd'] > 0:count_rise += 1if i['qy_fd'] < 0:count_drop += 1if i['value'] > qy_expensive:qy_expensive = i['value']if i['value'] < qy_cheap:qy_cheap = i['value']print('上涨次数:' + str(count_rise))
print('降价次数:' + str(count_drop))for i, j in zip(ls, ls[1:]):if i['value'] == qy_expensive:print('最贵的价格:' + str(qy_expensive))print('最贵的时候是:' + i['dim_date'] + '到' + j['dim_date'])
for i, j in zip(ls, ls[1:]):if i['value'] == qy_cheap:print('最便宜的价格:' + str(qy_cheap))print('最便宜的时候是:' + i['dim_date'] + '到' + j['dim_date'])
days = 0
for i, j in zip(ls, ls[1:]):if 3000 >= i['value'] >= 2000:days += daytime(j['dim_date'], i['dim_date'])print('油价停留在2000-3000元之间的天数:' + str(days))

2、Selenium自动化测试工具

2.1、安装工具

使用Selenium自动化测试工具

1、需要安装自动化测试库:pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple/

2、下载安装一下Chrome浏览器

3、查看一下浏览器版本:
      版本 97.0.4692.71 (我的版本)
      根据版本下载对应的 chromedriver   (selenium中需要调用,跟你日常使用没关系)
      网址:http://npm.taobao.org/mirrors/chromedriver/

4、将chromedriver.zip解压缩,得到chromedriver.exe文件,将该文件放入到python安装目录。
      将解压好的chromedriver.exe放入到anaconda的安装目录

selenium:可以通过代码来控制浏览器,点击、输入、前进、后腿、打开、关闭、访问网址等。

安装命令:pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple/

查看谷歌浏览器版本:

下载地址:ChromeDriver Mirror

将解压好的chromedriver.exe放入到anaconda的安装目录,也就是和python.exe在同一个文件夹中。

可以通过where python来查看Python的安装目录。

2.2、命令行操作

from selenium import webdriver# 启动
bw = webdriver.Chrome();  # bw对象,就代表你的浏览器窗口
# 注意,如果杀毒软件有弹窗拦截,请点击“允许”(永久允许)
# 版本和路径都正确,才能开启浏览器。# 访问路径
bw.get("https://www.baidu.com");  #
# 注意,没有返回值;所有的数据变动,都体现在bw对象本身。# 获取页面内容
# 定位元素:find_elements_by_css_selector('选择器')--->相当于 select('选择器')
sa = bw.find_elements_by_css_selector('.hotsearch-item a')
print(len(sa));
# 获取元素内容:.text---->get_text()
# 获取元素属性:.get_attribute("属性名")--->['属性名']for a in sa:print(a.text);# 实现点击
#   定位元素  调用click即可# 关闭
bw.close()

>>> from selenium import webdriver
>>> # 启动浏览器
>>> bw = webdriver.Chrome();

 

PyCharm导入selenium:

Python实训day07am【爬取数据接口、webdriver、自动化测试工具selenium】相关推荐

  1. Python—实训day6—爬取汽车消费投诉案例

    任务:爬取某公开网站上的汽车用户消费投诉数据('http://tousu.315che.com/tousulist/serial/55467/'),字段包含品牌.投诉内容.品牌车型.单号.投诉问题.投 ...

  2. python滚动条翻页爬取数据_Python网络爬虫之Selenium 处理滚动条【第十四节】

    Selenium 处理滚动条selenium并不是万能的,有时候页面上操作无法实现的,这时候就需要借助JS来完成了 当页面上的元素超过一屏后,想操作屏幕下方的元素,是不能直接定位到,会报元素不可见的. ...

  3. [网络爬虫|smtp协议|python]东方财富网爬虫,python smtp协议发送爬取数据至QQ邮箱

    本文改自 [网络爬虫|smtp协议|python]东方财富网爬虫,python smtp协议发送爬取数据至QQ邮箱 之前写的爬虫单子,代码已经跑了快3个月了,后续又增加了一些需求,修改了一些小bug ...

  4. 使用python和PyQt5编写爬取百度图片的界面工具

    使用python和PyQt5编写爬取百度图片的界面工具 本篇文章的主要内容是展示我个人编写的,以界面小工具的方式爬取百度上面的图片,功能很单一,根据关键词爬取图片,代码很简单,新手上路请多指教. 代码 ...

  5. python登录网站后爬取数据_用 Python 登录主流网站,我们的数据爬取少不了它

    不论是自然语言处理还是计算机视觉,做机器学习算法总会存在数据不足的情况,而这个时候就需要我们用爬虫获取一些额外数据.这个项目介绍了如何用 Python 登录各大网站,并用简单的爬虫获取一些有用数据,目 ...

  6. python爬虫库scrapy_使用Python爬虫Scrapy框架爬取数据

    时隔数月,国庆期间想做个假期旅游的分析展示. 1.通过Python爬取旅游网站上数据,并存储到数据库 2.通过Echart/FineReport/Superset等数据分析工具对数据展示 环境: Wi ...

  7. 网络爬虫:Python如何从网上爬取数据?

    网络爬虫,就是按照一定规则自动访问互联网上的信息并把内容下载下来的程序或脚本. 在整个的Python爬虫架构里,从基础到深入我分为了10个部分:HTTP.网页.基本原理.静态网页爬取.动态网页爬取.A ...

  8. 继php使用curl爬取数据接口将字符串json转为json再讲返回的html页面取出图片路径和描述插入json数组中

    https://blog.csdn.net/weixin_45237065/article/details/109726773 爬取接口之前需要能够访问到接口 访问接口需要登录成功后的cookie c ...

  9. python登录网站后爬取数据_如何用 Python 登录主流网站,爬取一些需要的数据

    最近收集了一些网站的登陆方式和爬虫程序,有的通过 selenium 登录,有的则通过抓包直接模拟登录.作者希望该项目能帮助初学者学习各大网站的模拟登陆方式,并爬取一些需要的数据. 作者表示模拟登陆基本 ...

最新文章

  1. Silverlight 5 深入理解 - TechEd2011葡萄城讲师课程
  2. JS,Jquery获取各种屏幕的宽度和高度
  3. 边写 Javascript 代码边玩游戏 – WarriorJS
  4. 9 月 19 日,腾讯云安全中心监测到  Apache Tomcat 修复了2个严重级别的漏洞, 分别为: 信息泄露漏洞(CVE-2017-12616)、远程代码执行漏洞(CVE-2017-12615
  5. oh-my-zsh扫描git仓库卡慢的解决方法
  6. Python之网络爬虫(验证码、代理IP、防反爬策略、封装一个抓取页面的函数)
  7. 电商后台、手机端、小程序、H5、电商原型、需求池、产品结构图、接口流程、高保真交互、PRD、布局说明、数据统计、店铺管理、商品管理、财务管理、售后、订单、会员、客服、标签、Axure原型、产品原型
  8. 经典算法题每日演练——第七题 KMP算法
  9. Linux内核学习编译流程
  10. 如何利用Camtasia为视频添加注释?
  11. 用Python标记识别人脸制作镂空图案的“笑脸”照片墙
  12. 虚拟打印机如何打印Text
  13. 快速学计算机的方法,学电脑打字用什么方法学的最快
  14. php_enchant,Enchant - [ php中文手册 ] - 在线原生手册 - php中文网
  15. 谷歌浏览器提示您的连接不是私密连接的解决方法
  16. 电子计算机经历的四个阶段,电子计算机的发展经历了四代,其划分依据是什么?,计算机发展的四个阶段...
  17. keil中设置的flash(irom)的起始地址为0x08000000,这个0x08000000的意义------stm32地址映射图解析
  18. 什么是MySQL数据空洞?
  19. 雨林木风最新万能GHOST系统制作教程
  20. 用GATK进行二代测序数据 SNP Calling 流程:(二)bwa比对和HaplotypeCaller 变异检测

热门文章

  1. 程序设计囚犯与灯泡 C语言代码,100个囚犯和灯泡的那些事儿(下)
  2. mysql例题_mysql练习题1
  3. linux下mysql的备份_Linux下MySQL的备份与还原
  4. 用webstorm做一个跑马灯_用Workman做一个聊天室
  5. 七年级上册数学计算机教学视频,七年级上册数学教学视频免费
  6. java 发送附件_Java 基于javaMail的邮件发送(支持附件)
  7. tensorflow分类的loss函数_Tensorflow入门教程(三十三)——图像分割损失函数FocalLoss...
  8. 深度学习和目标检测系列教程 16-300:通过全球小麦数据集训练第一个yolov5模型
  9. 2020 年最全 Python 面试题汇总 (二)
  10. docker启动sqlserver_ASP.NET Core容器化技术Docker零基础从入门到实战演练