3-数据提取方法1(json)(6节课学会爬虫)

news2024/11/19 1:31:16

3-数据提取方法1(json)(6节课学会爬虫)

  • 1,Json
  • 2,哪里会返回json的数据(值得尝试的操作)
  • 3,Json字符串转换成字典或python类型进行数据提取
    • (1)Json.loads
    • (2)Json.dumps
  • 4,百度翻译
  • 5,豆瓣电视剧

1,Json

数据交换格式(数据后端传递到前端,一般是json的格式),看起来像python的字符串列表、字典

使用json前需要导入 import json

2,哪里会返回json的数据(值得尝试的操作)

  浏览器切换到手机版(不是每个页面都会返回json数据,如百度手机版,虽然是手机版,但返回的不是json而是HTML的数据)
  抓包App(很多app,有的前端和后端都是被人写的,会在前端和后端传输数据的时候加密,抓到的数据都是加密后的,可能也会获取不到,也是值得尝试的,一旦找到返回json数据的地址,会使我们后续的操作非常的容易)

3,Json字符串转换成字典或python类型进行数据提取

(1)Json.loads

-把json字符串转换成python字典类型

  Json.loads(json字符串)

(2)Json.dumps

把python的字典类型转换成字符串

Json.dumps({“a”:”a”,”b”:2})

当我们写文件时,将字典写入到本地是不行的,只能是字符串
Ensure_ascii:让中文显示成中文
Indent:能够让下一行在上一行的基础上空格

4,百度翻译

https://blog.csdn.net/qq_25404477/article/details/103331566
百度翻译反爬越来越难爬取(不能使用其他字符串的原因如上连接)

#-*- codeing = utf-8 -*- 
#@Time : 2020/12/9 18:45
#@Author : 招财进宝
#@File : 06-try_json.py
#@Software: PyCharm

import requests
import json

#模拟浏览器访问
url = "https://fanyi.baidu.com/v2transapi?from=zh&to=en"

#query_str = input("请输入要翻译的中文:")

data={
    "from": "zh",
    "to": "en",
    "query": "你好",
    "transtype": "translang",
    "simple_means_flag": "3",
    "sign": "232427.485594",
    "token": "365f8c1b81a6764199c2f387c1da6e2f",
    "domain": "common"
    }

print(data)

headers = {
    "accept-encoding": "gzip, deflate, br",
    "accept-language": "zh-CN,zh;q=0.9",
    "cache-control": "no-cache",
    "content-length": "150",
    "content-type": "application/x-www-form-urlencoded; charset=UTF-8",
    "origin": "https://fanyi.baidu.com",
    "pragma": "no-cache",
    "referer":"https://fanyi.baidu.com/v",
    "sec-fetch-destv": "empty",
    "sec-fetch-mode": "cors",
    "sec-fetch-site": "same-origin",
    "x-requested-with": "XMLHttpRequest",
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36",
    "cookie": "换成自己的"
    }

response = requests.post(url,data=data,headers=headers)

html_str = response.content.decode()        #json字符串,类型是str

dict_ret = json.loads(html_str)             #将json字符串转换成字典类型
print(dict_ret)                             #{'trans_result': {'data': [{'dst': 'Hello', 'prefixWrap': 0,........
print(type(dict_ret))

ret = dict_ret["trans_result"]["data"][0]["dst"]    #从上方的dict_ret结果进行需要的数据的提取,提取的方式如左侧
#
print("翻译的结果是:",ret)

5,豆瓣电视剧

  使用Chrome浏览器打开百度页面,可以切换到手机版(我这里是手机上的网页版,因为其要下载app,可能后面的结果不是json的,直接就是网页),手机版对应的页面返回的是json

在这里插入图片描述

要在network中找到那个url地址是包含这些美剧信息的地址

当我们点击
在这里插入图片描述

  当我们点击ctr+F的时候,进行搜索上面的内容是否在response中,有时候无法搜索到,原因有2:
1.response中没有
2.中文是被编码后的中文,直接使用中文是搜索不到的,可以在preview中搜索(在preview中的中文就是正常中文)

  当以上两种方式在url中都无法找到时,可以接着向下寻找url,只要js和css都不需要管,最后发现

在这里插入图片描述

https://m.douban.com/search/?query=%E7%BE%8E%E5%89%A7&type=movie
当使用上面链接进行另一标签页再打开的时候,发现可能会出错,

  在request的headers中进行查看,其中accept都不用关心,而下方的要和前面的标签页面进行对比,最后发现refer这个字段内容没有,很有可能是此内容导致页面的数据无法获取

  下方在编程中进行实现,加入refer字段后,就能得到数据了,说明豆瓣的反爬机制是对此有反应的(但真实情况是use-agent一个字段就可以了,应该是视频上的出现了错误)

#-*- codeing = utf-8 -*- 
#@Time : 2020/12/10 9:10
#@Author : 招财进宝
#@File : 07_try_json.py
#@Software: PyCharm


import requests

url = "https://m.douban.com/search/?query=%E7%BE%8E%E5%89%A7&type=movie"

headers={
    "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1",
    }

response = requests.get(url,headers=headers)

print(response.content.decode())



https://m.douban.com/search/?query=%E7%BE%8E%E5%89%A7&type=movie因为上方的结果是网页的HTML,并不是json的数据格式,所以接下来的编写就不进行了

Ensure_ascii =False    #不再以ASCII码的方式保存中文
Indent=2         #能在保存时有换行的效果,下一行比上一行空2格

在这里插入图片描述

在这里插入图片描述

https://m.douban.com/j/search/?q=%E7%BE%8E%E5%89%A7&t=movie&p=1
  当我们使用鼠标在上方的收集版网页进行搜索时,需要点击更多搜索结果,然后会出现新的url,在此url中,如上,可以看到页面的
在这里插入图片描述

当我们将其输入到地址栏中时,就可以看到返回的json数据
在这里插入图片描述

由此可以判断https://m.douban.com/j/search/?q=%E7%BE%8E%E5%89%A7&t=movie&p=1
就是根据p改变的页面

通过p向服务器说明要返回什么数据
在这里插入图片描述

或者自己的分析不够精确,可能是count的作为限制数

下方就不编写这个手机版的json的爬取代码了,因为此处和视频上的是无法对应的,这个实时性太强了,现在使用之前的代码函数,是无法获取的到数据的。

下面是写到一半的代码

#-*- codeing = utf-8 -*- 
#@Time : 2020/12/10 9:58
#@Author : 招财进宝
#@File : 08_douban_spider.py
#@Software: PyCharm

from parse import parse_url         #此处的parse文件应放在项目的下一级,而不是好几级,会引入不到
import json

class DoubanSpider:

    def __init__(self):
        self.temp_url = "https://m.douban.com/j/search/?q=%E7%BE%8E%E5%89%A7&t=movie&p={}"

    def get_contentf_list(self,html_str):   #提取数据
        dict_data = json.loads(html_str)
        content_list = dict_data["html"]        #返回的是HTML字段的数据(不再进行下去了)

    def run(self):#实现主要逻辑
        num=1
        #1.start_url
        start_url = self.temp_url.format(1)
        #2.发送请求获取响应
        html_str = parse_url(start_url)                 #使用自己封装的函数进行url请求
        #3.提取数据
        #4.保存
        #5.构造下一页的url地址,循环2-5次
#-*- codeing = utf-8 -*- 
#@Time : 2020/12/9 14:36
#@Author : 招财进宝
#@File : parse.py
import requests
from retrying import retry

#下方是电脑版的,若是手机版的,还需要更改为手机版
headers = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"}

# headers={
#     "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1",
#     }

@retry(stop_max_attempt_number=3)       #让下面被装饰的函数反复执行三次,三次全部报错才会报错,中间有一次正常,程序继续往后走
def _parse_url(url):
    print("*"*100)
    response = requests.get(url,headers=headers,timeout=5)
    return response.content.decode()

def parse_url(url):
    try:
        html_str = _parse_url(url)
    except:
        html_str = None
    return html_str

if __name__ == '__main__':
    url = "http://www.baidu.com"
    print(parse_url(url)[:100])         #只打印前100字符串,此处访问成功只出现一行*
    url1 = "www.baidu.com"              #此处地址有误
    print(parse_url(url1))              #会出现三行*
#@Software: PyCharm

下面是视频上的内容
定义run方法,可以清楚的知道先做了什么,后做了什么,接着就是各个函数的编写

在浏览器中,获取的数据只有几百条,被限制住了

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

使用热力图表示联邦学习场景中的客户端数据分布

用于生成热力图,记录过程,方便之后直接使用。 使用场景:联邦学习中显示客户端数据分布,或者显示数据分布的各类其他场景 文章目录 一、代码hot.py使用方法 二、参数解释三、样图关键词 一、代码 写这段代码时主要考虑联邦学习中显…

短视频抓取:成都柏煜文化传媒有限公司

短视频抓取:技术挑战、法律边界与未来趋势 随着移动互联网的迅猛发展,短视频平台如雨后春笋般涌现,成为现代人生活娱乐的重要组成部分。然而,在海量短视频内容中,如何高效、准确地抓取目标视频,成为了一个…

JUC工具类: Semaphore详解

Semaphore底层是基于AbstractQueuedSynchronizer来实现的。Semaphore称为计数信号量,它允许n个任务同时访问某个资源,可以将信号量看做是在向外分发使用资源的许可证,只有成功获取许可证,才能使用资源。立刀旁 目录 # 带着BAT大厂…

媒体宣发套餐的概述及推广方法-华媒舍

在今天的数字化时代,对于产品和服务的宣传已经变得不可或缺。媒体宣发套餐作为一种高效的宣传方式,在帮助企业塑造品牌形象、扩大影响力方面扮演着重要角色。本文将揭秘媒体宣发套餐,为您呈现一条通往成功的路。 1. 媒体宣发套餐的概述 媒体…

昇思25天学习打卡营第5天|网络与模型相关要素探讨

目录 从 MindSpore 模块中导入nn和ops 定义模型类 模型层 nn.Flatten nn.Dense nn.ReLU nn.SequentialCell nn.Softmax 模型参数 从 MindSpore 模块中导入nn和ops 将 MindSpore 整个模块引入到当前的 Python 脚本里,方便后续运用 MindSpore 所提供的各类功能…

森林防火气象站:守护森林安全的科技利器

在广袤无垠的森林中,火灾一直是威胁森林生态安全的重要因素。为了有效预防和控制森林火灾,科学家们不断研发新技术,而森林防火气象站正是这一领域的重要成果之一。其中,森林防火气象站凭借其强大的功能和独特的设计,在…

餐厅在线点餐小程序源码系统可外卖配送 带完整的安装代码包以及搭建部署教程

系统概述 在当今数字化时代,餐厅在线点餐小程序已成为餐饮行业的重要工具。它不仅为消费者提供了便捷的点餐体验,也为餐厅提高了运营效率和服务质量。小编给大家分享一款餐厅在线点餐小程序源码系统,该系统不仅支持在线点餐,还具…

Python逻辑控制语句 之 循环语句--while循环

1.while 的介绍 让指定的代码 重复 的执行。 应用场景: while 循环最常用的应用场景就是 让执行的代码 按照 指定的次数 重复执行 2.while 的语法 初始条件设置 # 通常是重复执行的 计数器 while 判断条件: # 判断计数器是否达到目标次数 条件…

博途PLC轴工艺对象随动误差监视功能

S7-1200PLC和V90总线伺服通过工艺对象实现定位控制时在组态工艺对象里有这样的随动误差监视功能介绍,关于这个功能,今天我们解读下,工艺对象组态编程可以参考下面文章链接: S7-1200PLC和V90总线伺服通过工艺对象实现定位控制(标准报文3应用)_v90工艺对象3号报文-CSDN博客文…

放弃吧!你招不到优秀AI产品经理;程序员优雅做副业指南;一人企业系统方法论(6万字);大模型训练10条黄金法则 | ShowMeAI日报

👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 1. 5亿条国内招聘信息,洞察 1639 种人类职业被AI替代的风险 2023年,OpenAI 发布了一篇论文 GPTs are GPTs: An Early Look at…

Tektronix泰克 AWG70001A 任意波形发生器

Tektronix泰克 AWG70001A 任意波形发生器 AWG70000A 系列任意波形发生器 (AWG) 在采样率、信号保真度和波形内存方面代表着尖端水平,特别适合复杂器件、系统和实验的设计、测试和操作。由于高达 50 GS/s 采样率和 10 位垂直分辨率,它提供了优秀的信号激…

CDS 基本原理与ADT 安装

一、ADT环境安装及介绍 安装eclipse 选择适合的ADT版本: SAP Development Tools for Eclipse - 2023-03 Software Repository https://tools.hana.ondemand.com/2023-06 SAP Development Tools for Eclipse - Latest Software Repository 选择ABAP development …

go Channel原理 (二)

Channel 设计原理 不要通过共享内存的方式进行通信,而是应该通过通信的方式共享内存。 在主流编程语言中,多个线程传递数据的方式一般都是共享内存。 Go 可以使用共享内存加互斥锁进行通信,同时也提供了一种不同的并发模型,即通…

OSRAM欧司朗XBO短弧氙灯160WHSXLOFR短弧氙灯450W

OSRAM欧司朗XBO短弧氙灯160WHSXLOFR短弧氙灯450W

Pycharm中安装Pytorch的库

step1&#xff1a; step2&#xff1a; step3&#xff1a; pip install torch torchvisionstep4&#xff1a; pip install numpy<2 # 版本低点&#xff0c;和pytorch版本不兼容&#xff0c;我当时是用的2.0的step5&#xff1a; pip install pandasstep6&#xff1a; …

2.00004 优化器执行计划生成的流程是怎么样的?

文章目录 整体架构关键结构体PlannerInfo (pathnodes.h:195)PlannerGlobal (pathnodes.h:95)函数栈关键函数pg_plan_query (postgres.c:885)planner (planner.c:274)standard_planner (planner.c:287)subquery_planner (planner.c:628)整体架构 关键结构体 PlannerInfo (pathn…

【电源拓扑】PFC

为什么开关电源中都有PFC电路 PFC电路就是功率矫正电路&#xff0c;目的是为了防止杂波对电网产生冲击 AC220V通过整流桥之后电压和电流的波形分析 PFC电路为什么选择是Boost升压电路 PFC电路为什么要把电压升高到400V 为了解决输入电压低于滤波电容电压这个矛盾&#xff0…

2024攻防演练:亚信安全推出MSS/SaaS短期定制服务

随着2024年攻防演练周期延长的消息不断传出&#xff0c;各参与方将面临前所未有的挑战。面对强大的攻击队伍和日益严格的监管压力&#xff0c;防守单位必须提前进行全面而周密的准备和部署。为应对这一形势&#xff0c;亚信安全特别推出了为期三个月的MSS/SaaS短期订阅方案。该…

《昇思25天学习打卡营第8天|CarpeDiem》

《昇思25天学习打卡营第8天|CarpeDiem》 模型训练构建数据集定义神经网络模型定义超参、损失函数和优化器超参损失函数优化器 训练与评估 打卡 今天是昇思25天学习打卡营的第8天&#xff0c;终于迎来 模型训练 的部分了&#xff01;&#xff01;&#xff01; 兴奋 发癫 模型训…

2065. 最大化一张图中的路径价值 Hard

给你一张 无向 图&#xff0c;图中有 n 个节点&#xff0c;节点编号从 0 到 n - 1 &#xff08;都包括&#xff09;。同时给你一个下标从 0 开始的整数数组 values &#xff0c;其中 values[i] 是第 i 个节点的 价值 。同时给你一个下标从 0 开始的二维整数数组 edges &#xf…