爬虫练习——动态网页的爬取(股票和百度翻译)

news2024/12/31 3:44:28

动态网页也是字面意思:实时更新的那种

还有就是你在股票这个网站上,翻页。他的地址是不变的

是动态的加载,真正我不太清楚,只知道他是不变的。如果用静态网页的方法就不可行了。

静态网页的翻页,是网址是有规律的。

还有就是:
在百度翻译中你总是在百度翻译一个网站上 ,并没有因此而改变。(意思就是不是查一个单词,换一个网址)


正文开始了哈:

      先来看成品和代码;

 如果想要其他东西,只要改对应的地方。就可以拿到对于的数据

import os
import requests
import re
import json

wenjian = input("您要保存的文件名:")
img_path = f"./{wenjian}/"  # 指定保存地址
if not os.path.exists(img_path):
    print("您没有这个文件为您新建一个文件:")
    os.mkdir(img_path)
else:
    print(f"您有这个文件夹,将为您保存在“{wenjian}”中")
count=0
url = "https://63.push2.eastmoney.com/api/qt/clist/get?"

hearders = {
'User-Agent':
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 Edg/121.0.0.0'
}
#for i in range(1,281,1):
for i in range(1,281,1):
    count+=1
    params = {
        'cb': 'jQuery1124010908871949611432_1707493179217',
        'pn': f'{i}',
        'pz': '20',
        'po': '1',
        'np': '1',
        'ut': 'bd1d9ddb04089700cf9c27f6f7426281',
        'fltt': '2',
        'invt': '2',
        'wbp2u': '|0|0|0|web',
        'fid': 'f3',
        'fs': 'm:0 t:6,m:0 t:80,m:1 t:2,m:1 t:23,m:0 t:81 s:2048',
        'fields': 'f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152',
        '_': '1707493179252'
    }

    resqonse = requests.get(url,headers=hearders,params=params).text
    #print(resqonse)
    obj = re.compile(r"jQuery1124010908871949611432_1707493179217\((?P<json>.*?)\);")#给正则表达式的匹配的东西起个名字,叫json(?P<name>.*?)
    content = obj.search(resqonse).group('json')#在reqonse中搜索json的正则表达式
    #print(content)
    #print(f"第一次拿到的是content他的类型为{type(content)}")
    #转换成字典
    dic = json.loads(content)
    #print(dic)
    #print(f"改为字典为dic类型为{type(dic)}")
    #拿数据
    diff = dic['data']['diff'] #想要拿名字和股票编号。他们在data里的diff中
    for i in diff:
        name = i['f14']
        num = i['f12']
        #print(f"他的名字是:   {name}——{num}")
        end = name+'-------'+num+"\n"

        f = open(f"{img_path}{wenjian}.txt", 'a')
        f.write(end)
    print(f"第{count}页打印完成")



一般在XHR和JS文件中找到想要的数据 

要加入params和headers你会发现页数的改变是跟着 params中的'pn'在变,所以在页数改变的同时,'pn'也再改变。


上述代码中,加入新东西的是---Json

Json模块提供了四个功能:dumps、dump、loads、load,用于字符串 和 python数据类型间进行转换。

1.dumps和dump:

dump比Dumps多了一个操作,对于文件的写入。改为数据类型然后写入文件

# fp = open(f'{img_path}.txt', 'w',encoding='utf-8')
# json.dump(dic,fp=fp,ensure_ascii=False),中文的写入


2.毕竟是学习,就截屏了做个笔记。

import json

a="[1,2,3,4]"
b='{"k1":1,"k2":2}'#当字符串为字典时{}外面必须是''单引号{}里面必须是""双引号

print (json.loads(a) )
[1, 2, 3, 4]


print (json.loads(b) )
{'k2': 2, 'k1': 1}

 上面这个就很简单了到目前来说,简单指的是可以看懂!!!

面还有一个关于给自己正则表达式找到的起名字的写法,代码后面我有注释,不再多说!!!


下面是百度翻译的读取,顺便做了个翻译系统:

这个我就是多查了计次。

import json
import requests
import os
Myflag=1
img_path = '百度翻译'
img_path = f"./{img_path}/"  # 指定保存地址
if not os.path.exists(img_path):
    print("您没有这个文件为您新建一个文件---")
    os.mkdir(img_path)
else:
    print(f"百度翻译——结果为您保存在{img_path}文件夹中")
url = "https://fanyi.baidu.com/sug"
while Myflag!="0":
    wenjian = input("您要查询的单词是:")
    header = {
    'User-Agent':
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 Edg/121.0.0.0'
    }

    data = {
        'kw':f'{wenjian}'
    }
    response = requests.post(url = url,headers = header,data = data)
    dic = response.json()
    data = dic['data']
    print(f"您所查询的{wenjian}的意思是:")
    for i in data:
        data = i['k']
        translate = i['v']
        end=data+'————————'+translate+'\n'
        ending = "\n\n\n================================================\n\n\n\n"
        print(f'{data}————————{translate}')
        f = open(f"{img_path}{wenjian}.txt", 'a')
        f.write(end)
    f = open(f"{img_path}{wenjian}.txt", 'a')
    ending = "\n\n\n================================================\n\n\n\n"
    f.write(ending)
    print("保存完成")
    Myflag = input("退出选‘0’,如果想退出请按任意键:")


print("您退出单词查询")

# fp = open(f'{img_path}.txt', 'w',encoding='utf-8')
# json.dump(dic,fp=fp,ensure_ascii=False)






总体来说,要找清楚,你要查询的请求方式。这个为post,到现在用过的请求方式为get。

post中要加入data!!!也就是百度翻译的要翻译的内容!!!

会发现这里没有用json转换一下,因为这个本事得到的是一个‘dic’的

而上一个用正则表达式得到的名字为json的东西是str,要改为dic,然后分析文件

上面写入文件的操作在我前面有写到,前面的文章。多看几个就会了。!!!

新年快乐!!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1443852.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】信号概念与信号产生

信号概念与信号产生 一、初识信号1. 信号概念2. 前台进程和后台进程3. 认识信号4. 技术应用角度的信号 二、信号的产生1. 键盘组合键2. kill 命令3. 系统调用4. 异常&#xff08;1&#xff09;观察现象&#xff08;2&#xff09;理解本质 5. 软件条件闹钟 一、初识信号 1. 信号…

【网络】:序列化和反序列化

序列化和反序列化 一.json库 二.简单使用json库 前面已经讲过TCP和UDP&#xff0c;也写过代码能够进行双方的通信了&#xff0c;那么有没有可能这种通信是不安全的呢&#xff1f;如果直接通信&#xff0c;可能会被底层捕捉&#xff1b;可能由于网络问题&#xff0c;一方只接收到…

k8s-资源限制与监控 15

资源限制 上传实验所需镜像 Kubernetes采用request和limit两种限制类型来对资源进行分配。 request(资源需求)&#xff1a;即运行Pod的节点必须满足运行Pod的最基本需求才能 运行Pod。 limit(资源限额)&#xff1a;即运行Pod期间&#xff0c;可能内存使用量会增加&#xff0…

区间dp 笔记

区间dp一般是先枚举区间长度&#xff0c;再枚举左端点&#xff0c;再枚举分界点&#xff0c;时间复杂度为 环形石子合并 将 n 堆石子绕圆形操场排放&#xff0c;现要将石子有序地合并成一堆。 规定每次只能选相邻的两堆合并成新的一堆&#xff0c;并将新的一堆的石子数记做该…

分布式搜索引擎 elasticsearch

分布式搜索引擎 elasticsearch 第一部分 1.初识elasticsearch 1.1.了解ES 1.1.1.elasticsearch的作用 elasticsearch是一款非常强大的开源搜索引擎&#xff0c;具备非常多强大功能&#xff0c;可以帮助我们从海量数据中快速找到需要的内容 例如&#xff1a; 在GitHub搜索…

159基于matlab的基于密度的噪声应用空间聚类(DBSCAN)算法对点进行聚类

基于matlab的基于密度的噪声应用空间聚类(DBSCAN)算法对点进行聚类&#xff0c;聚类结果效果好&#xff0c;DBSCAN不要求我们指定集群的数量&#xff0c;避免了异常值&#xff0c;并且在任意形状和大小的集群中工作得非常好。它没有质心&#xff0c;聚类簇是通过将相邻的点连接…

[论文总结] 深度学习在农业领域应用论文笔记12

文章目录 1. 3D-ZeF: A 3D Zebrafish Tracking Benchmark Dataset (CVPR, 2020)摘要背景相关研究所提出的数据集方法和结果个人总结 2. Automated flower classification over a large number of classes (Computer Vision, Graphics & Image Processing, 2008)摘要背景分割…

猜猜谁是凶手?

目录 一、题目二、思路三、完整代码 一、题目 日本某地发生了一件谋杀案&#xff0c;警察通过排查确定杀人凶手必为4个嫌疑犯的一个。 以下为4个嫌疑犯的供词: A说&#xff1a;不是我。 B说&#xff1a;是C。 C说&#xff1a;是D。 D说&#xff1a;C在胡说 已知3个人说了…

hexo 博客搭建以及踩雷总结

搭建时的坑 文章置顶 安装一下这个依赖 npm install hexo-generator-topindex --save然后再文章的上面设置 top: number&#xff0c;数字越大&#xff0c;权重越大&#xff0c;也就是越靠顶部 hexo 每次推送 nginx 都访问不到 宝塔自带的 nginx 的 config 里默认的角色是 …

RabbitMQ高级篇

消息队列在使用过程中&#xff0c;面临着很多实际问题需要思考&#xff1a; 一、消息可靠性 消息从发送&#xff0c;到消费者接收&#xff0c;会经历多个过程&#xff1a; 其中的每一步都可能导致消息丢失&#xff0c;常见的丢失原因包括&#xff1a; 发送时丢失&#xff1a;…

【sentinel流量卫兵配置持久化到Nacos】

sentinel流量卫兵配置持久化到Nacos 概述&#xff1a; 一、添加配置二、配置说明限流规则配置&#xff1a;降级规则配置&#xff1a;热点规则配置&#xff1a;授权规则配置&#xff1a;系统规则配置&#xff1a; 三、服务整合 概述&#xff1a; 控制台配置的参数&#xff0c;默…

政安晨:示例演绎TensorFlow的官方指南(一){基础知识}

为什么要示例演绎&#xff1f; 既然有了官方指南&#xff0c;咱们在官方指南上看看就可以了&#xff0c;为什么还要写示例演绎的文章呢&#xff1f; 其实对于初步了解TensorFlow的小伙伴们而言&#xff0c;示例演绎才是最重要的。 官方文档已经假定了您已经具备了相当合适的…

卫星通讯领域FPGA关注技术:算法和图像方面(4)

最近关注的公众号提到了从事移动通信、卫星通讯等领域的FPGA、ASIC、信号处理算法等工程师可能需要关注的技术&#xff0c;有5G NTN、多址技术、低轨通信卫星LEO&#xff0c;以下做了一些基础的调研&#xff1a; 1 5G NTN 来自《5G NTN技术白皮书&#xff1a;天地一体、手机直…

error: object ‘FastMNNIntegration‘ not found

加载一个包即可 library(SeuratWrappers) #运行fastmnn之前&#xff0c;需要加载&#xff0c;否则报错 obj <- IntegrateLayers(object obj, method FastMNNIntegration,new.reduction "integrated.mnn",verbose FALSE )

Solidworks:平面草图练习

继续练习平面草图&#xff0c;感觉基本入门了。

如何将 Hexo 部署到 GitHub Pages

引言 在数字时代&#xff0c;拥有个人博客是展示自己想法、分享知识和技能的绝佳方式。Hexo 是一个基于 Node.js 的静态博客生成器&#xff0c;它结合了简洁性和功能性&#xff0c;让我们可以轻松地建立并维护一个博客。而 GitHub Pages 提供了一个免费的平台来托管这些静态网站…

软考 系统分析师系列知识点之信息系统战略规划方法(5)

接前一篇文章&#xff1a;软考 系统分析师系列知识点之信息系统战略规划方法&#xff08;4&#xff09; 所属章节&#xff1a; 第7章. 企业信息化战略与实施 第4节. 信息系统战略规划方法 7.4.3 战略集合转化法 战略目标集合转化法&#xff08;Strategy Set Transformation&a…

代码随想录算法训练营第四十八天(动态规划篇之01背包)| 1049. 最后一块石头的重量Ⅱ,494. 目标和

1049. 最后一块石头的重量Ⅱ 题目链接&#xff1a;1049. 最后一块石头的重量 II - 力扣&#xff08;LeetCode&#xff09; 思路 尽量将石头分为重量相同的两堆&#xff0c;这样两堆中的石头相撞之后剩下的石头就会最小。根据之前的01背包理论&#xff1a; 代码随想录算法训…

Hugging Face 刚刚推出了一款开源的 AI 助手制造工具,直接向 OpenAI 的定制 GPT 挑战

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

C++面向对象 Part 2

文章目录 类六个默认存在的成员函数构造函数&#xff1a;析构函数&#xff1a;拷贝构造函数:拷贝构造详解及细节&#xff1a; 赋值运算符重载;取地址及const取地址操作符重载const修饰的含义&#xff1a; 类六个默认存在的成员函数 构造函数 析构函数 拷贝构造函数 赋值运算…