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

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

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

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

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

还有就是:

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


正文开始了哈:

先来看成品和代码;

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

python 复制代码
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多了一个操作,对于文件的写入。改为数据类型然后写入文件

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

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

python 复制代码
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}

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

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


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

这个我就是多查了计次。

python 复制代码
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,然后分析文件。

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

新年快乐!!!!

相关推荐
csdn_aspnet44 分钟前
Libvio.link爬虫技术深度解析:反爬机制破解与高效数据抓取
爬虫·反爬·libvio
0思必得03 小时前
[Web自动化] Selenium处理滚动条
前端·爬虫·python·selenium·自动化
vx_biyesheji00014 小时前
豆瓣电影推荐系统 | Python Django 协同过滤 Echarts可视化 深度学习 大数据 毕业设计源码
大数据·爬虫·python·深度学习·django·毕业设计·echarts
深蓝电商API5 小时前
爬虫IP封禁后的自动切换与检测机制
爬虫·python
喵手6 小时前
Python爬虫实战:公共自行车站点智能采集系统 - 从零构建生产级爬虫的完整实战(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集公共自行车站点·公共自行车站点智能采集系统·采集公共自行车站点导出csv
喵手6 小时前
Python爬虫实战:地图 POI + 行政区反查实战 - 商圈热力数据准备完整方案(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·地区poi·行政区反查·商圈热力数据采集
芷栀夏7 小时前
从 CANN 开源项目看现代爬虫架构的演进:轻量、智能与统一
人工智能·爬虫·架构·开源·cann
喵手1 天前
Python爬虫实战:HTTP缓存系统深度实战 — ETag、Last-Modified与requests-cache完全指南(附SQLite持久化存储)!
爬虫·python·爬虫实战·http缓存·etag·零基础python爬虫教学·requests-cache
喵手1 天前
Python爬虫实战:容器化与定时调度实战 - Docker + Cron + 日志轮转 + 失败重试完整方案(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·容器化·零基础python爬虫教学·csv导出·定时调度
喵手1 天前
Python爬虫实战:全站 Sitemap 自动发现 - 解析 sitemap.xml → 自动生成抓取队列的工业级实现!
爬虫·python·爬虫实战·零基础python爬虫教学·sitemap·解析sitemap.xml·自动生成抓取队列实现