Python爬虫:从后端分析为什么你爬虫爬取不到数据

news2024/11/6 19:27:56

仅仅是小编总结的三点而已,可能不是很全面,如果之后小编了解到新的知识点,可能还会增加的哈!

1. 最简单的爬虫代码

也就是各位最常使用的,直接利用requests模块访问当前网站链接,利用相关解析模块从而获取得到自己想要的数据,如下(利用python爬虫爬取自己csdn个人主页的简介数据):

# -*- coding: utf-8 -*-

import requests
from lxml import etree

url = 'https://blog.csdn.net/qq_45404396'
headers = {
    'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36 Core/1.94.199.400 QQBrowser/11.8.5300.400'
}
rsp = requests.get(url=url,headers=headers)
html = etree.HTML(rsp.text)
info = html.xpath('//p[@class="introduction-fold default"]/text()')[0]
print(info)

运行结果:
请添加图片描述

下面展示它的后端实现,只是举个例子哈!利用SpringBoot+thymeleaf模拟哈!java代码和前端界面代码如下:

package com.example.demo.controller;


import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import java.util.HashMap;

@Controller
public class TestController {

    @GetMapping("/test1")
    public String test1(Model model){

        HashMap<String,Object> map = new HashMap<>();
        map.put("name","liuze");
        map.put("age",22);
        model.addAttribute("data",map);

        return "test1";
    }
}

这里没有定义一个相关的实体类了,直接使用hashmap

<!DOCTYPE html>
<html lang="en" xmlns:th="https://www.thymeleaf.org/">
<head>
    <meta charset="UTF-8">
    <title>test1</title>
</head>
<body>
    <p th:text="${data.name}">
    </p>
    <p th:text="${data.age}"></p>
</body>
</html>

界面效果如下:

请添加图片描述

这两个数据你直接访问这个界面是可以获取得到的(如果部署到公网上去的话!),你可以直接去查看这个界面的源代码或者来到开发者工具下点击网络->全部下,找到当前界面的链接,点击,然后点击响应,如下:

请添加图片描述

请添加图片描述
通常可以通过上述这种方式判断你直接访问当前网页链接是否可以获取得到你想要的那些数据。

2. 需要到script标签去找数据

其实,也就是你想要的那个数据在一个script标签内,也就是说如果你在第1中情况下你没有找到你想要数据,这时候你可以去找找某个script标签下是否有你想要的数据。比如小编我想要获取我的csdn个人主页的各个勋章的名称,可以发现,在某个script标签下有你想要的数据,如下:

请添加图片描述
它的这个勋章实现效果我想应该是这样的,后端使用和方法1相同,只不过没有把相关数据写入到对应标签内,而是先把数据写到一个script标签内,然后利用编写js脚本加以展示。python代码抓取如下:

# -*- coding: utf-8 -*-

import requests
from lxml import etree
import json

url = 'https://blog.csdn.net/qq_45404396'
headers = {
    'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36 Core/1.94.199.400 QQBrowser/11.8.5300.400'
}
rsp = requests.get(url=url,headers=headers)
html = etree.HTML(rsp.text)
info = html.xpath('//script/text()')[0]
index = info.find('=') + 1
_dict = json.loads(info[index:-1].strip())
_list = _dict['pageData']['data']['baseInfo']['medalModule']
count = 0
for e in _list:
    print(e['name'], end='   ')
    if count and count % 8 == 0:
        print('\n')
    count += 1

运行结果:

请添加图片描述
这种后端实现和上述一致,看看前端代码:

<!DOCTYPE html>
<html lang="en" xmlns:th="https://www.thymeleaf.org/">
<head>
    <meta charset="UTF-8">
    <title>test1</title>
</head>
<body>
    <p class="p1"></p>
    <p class="p2"></p>
    <script th:inline="javascript">
        var data = [[${data}]];
        document.querySelector('.p1').innerText = data.name;
        document.querySelector('.p2').innerText = data.age;
    </script>
</body>
</html>

运行结果:

请添加图片描述

3. 找ajax请求接口

如果通过上述两种方式,你还没有找到你想抓取的数据线索,你可以去看看网络->XHR(或JS)下有没有ajax链接接口了。比如我想抓取我的个人主页下的一些博客名称,这需要去找ajax链接接口了。

请添加图片描述
代码实现:

# -*- coding: utf-8 -*-

import requests
import json

url = 'https://blog.csdn.net/community/home-api/v1/get-business-list?page=1&size=20&businessType=blog&orderby=&noMore=false&year=&month=&username=qq_45404396'
headers = {
    'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36 Core/1.94.199.400 QQBrowser/11.8.5300.400'
}
rsp = requests.get(url=url,headers=headers)
_dict = json.loads(rsp.text)
_list = _dict['data']['list']
for e in _list:
    print(e['title'])

运行结果:

请添加图片描述
这种后端实现如下:

package com.example.demo.controller;


import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.HashMap;
import java.util.Map;

@Controller
public class TestController {

    @ResponseBody
    @GetMapping("/test2")
    public Map<String,Object> test1(Model model){

        Map<String,Object> map = new HashMap<>();
        map.put("name","liuze");
        map.put("age",22);

        return map;
    }

    @GetMapping("/test1")
    public String test2(Model model){

        return "test1";
    }
}


前端代码如下:

<!DOCTYPE html>
<html lang="en" xmlns:th="https://www.thymeleaf.org/">
<head>
    <meta charset="UTF-8">
    <title>test1</title>
</head>
<body>
    <p class="p1"></p>
    <p class="p2"></p>
    <script th:inline="javascript">
        fetch('/test2',{
            method:"get",
        }).then(res=>{
            return res.json();
        }).then((res)=>{
            document.querySelector('.p1').innerText = res.name;
            document.querySelector('.p2').innerText = res.age;
        });
    </script>
</body>
</html>

运行结果:

请添加图片描述
之所以后面两种情况,直接访问当前页面链接你访问不到相关数据,我想和页面加载顺序是有一定关系的,当然,这个点我也不是很清楚,希望上述所讲能帮助到大家哈!

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

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

相关文章

第三届陕西省大学生网络安全技能大赛wp

文章目录 第三届陕西省大学生网络安全技能大赛wpwebezpoptestezrceunserializeEsc4pe_T0_Mong0 misc管道可是雪啊飘进双眼 第三届陕西省大学生网络安全技能大赛wp web ezpop 在源码找到base64 解码&#xff1a; /pop3ZTgMw.php&#xff0c;访问获得源码&#xff1a; <?…

通过帮助中心提高客户满意度,帮助中心的最佳实践方式

随着技术的不断发展和产品的不断更新&#xff0c;消费者对产品的需求也越来越高。在这个竞争激烈的市场中&#xff0c;企业必须建立一个完善的帮助中心&#xff0c;来提供及时、准确的技术支持和解决方案&#xff0c;以满足客户的各种需求。这样能够有效地提高客户满意度&#…

java+springboot8高校教职工教师档案管理系统

系统设计遵循界面层、业务逻辑层和数据访问层的Web开发三层架构。采用B/S结构,使得系统更加容易维护。系统的设计与实现主要实现角色有管理员和用户,管理员在后台管理用户表模块、token表模块、公告信息模块、教职工模块、工资信息模块、调动离职模块、配置文件模块、出勤信息模…

好用工具第3期:全平台免费音乐LxMusic

LxMusic 1. 概要 LxMusic 是一个跨平台的开源的音乐播放器。支持本地音乐文件播放以及各大平台的音乐搜索播放和下载所有歌曲。 LxMusic 是一个开源项目, 项目地址是: 桌面端 https://github.com/lyswhut/lx-music-desktop 移动端 https://github.com/lyswhut/lx-music-mobi…

Ficus 第二弹,突破限制器的 Markdown 编辑管理软件!

大家好&#xff0c;我们是 ggG 团队&#xff0c;我们开发的 markdown 笔记管理软件 Ficus Beta 版本正式发布了。详情可以见我们官网&#xff0c;也可以来我们仓库查看。 相对于 Alpha 版本&#xff08;可以在我们之前的博客中查看&#xff09;&#xff0c;主要有 3 点明显的提…

【网络】协议定制+序列化/反序列化

为什么要序列化&#xff1f; 如果光看定义很难理解序列化的意义&#xff0c;那么我们可以从另一个角度来推导出什么是序列化, 那么究竟序列化的目的是什么&#xff1f; 其实序列化最终的目的是为了对象可以跨平台存储&#xff0c;和进行网络传输。而我们进行跨平台存储和网络…

[第一章 web入门]常见的搜集

首先就利用御剑或者dirsearch扫描一下网站后台&#xff0c;可以得到以下三个路径返回正常 robots.txt index.php~ .index.php.swp 其实我没扫描出来&#xff0c;这些都是看的别人的wp才做出来的&#xff0c;一开始我其实意识到御剑其实就是有一个字典&#xff0c;然后按照字典的…

【蓝桥杯算法题】用java遍写税收计算

【蓝桥杯算法题】用java遍写税收计算 题目&#xff1a;劳务报酬税收计算&#xff1a;输入 m &#xff0c;输出税后收入。如果 m <800&#xff0c;不扣税&#xff0c; 如果800< m <4000&#xff0e;则 m 减去800后的金额扣除20&#xff05;所得税。如果 m >4000&…

SpringBoot项目使用CXF框架开发Soap通信接口

SpringBoot项目使用CXF框架开发Soap通信接口 物料准备&#xff1a; 1.引入cxf官方提供的SpringBootStarter依赖 2.定义需要暴雷给外部调用的java接口以及接口的实现类 3.配置CxfConfig类&#xff0c;把你定义的java接口注册为webservice的Endpoint 引入cxf-spring-boot-st…

Solidwoks PDM Add-ins (C#) 创建菜单命令

演示如何创建 C# Add-ins :将菜单命令添加到库视图的上下文相关菜单的。 注意&#xff1a;由于 SOLIDWORKS PDM Professional 无法强制重新加载add-ins&#xff0c;因此必须重新启动所有客户端计算机以确保使用最新版本的add-ins。 启动VS。新建项目&#xff0c;选择类库。在“…

数据结构——队列

数据结构——队列 文章目录 数据结构——队列前言队列基本概念队列的基本操作队列的顺序存储结构创建顺序队列代码入队操作代码出队操作代码顺序队列的关键语句 队列的链式存储结构链式队列初始化链式队列判断空链式队列的入队操作链式队列的出队操作 循环队列循环队列基本思想…

「Tech初见」Linux驱动之chrdev

目录 免责声明I. MotivationII. SolutionS1 - 主次设备号S2 - 设备驱动程序S3 - 字符设备驱动程序 III. Result 免责声明 「Tech初见」系列的文章&#xff0c;是本人第一次接触的话题 对所谓真理的理解暂时可能还不到位&#xff0c;避免不了会出现令人嗤鼻的谬论 所以&#…

Oracle中改变表的Owner和tablespace

初用Oracle&#xff0c;很多的不熟悉&#xff0c;建完库&#xff0c;没有建用户&#xff0c;也没创建表空间&#xff0c;就直接system用户建表添加数据&#xff0c;几个月过去&#xff0c;表建了近百个&#xff0c;数据添加了几万条&#xff0c;才越来越觉得这种方式缺点太多&a…

docker对cpu资源做限制

系列文章目录 文章目录 系列文章目录一、cgroup1.groups四大功能2.CPU 资源控制 二、1.限制可用的 swap 大小&#xff0c; --memory-swap2.对磁盘IO配额控制&#xff08;blkio&#xff09;的限制 总结 一、cgroup 1.groups四大功能 资源限制&#xff1a;可以对任务使用的资源…

华为OD机试真题 JavaScript 实现【相对开音节】【2022Q4 100分】,附详细解题思路

一、题目描述 相对开音节构成的结构为辅音元音&#xff08;aeiou&#xff09;辅音(r除外)e&#xff0c;常见的单词有life,time,woke,coke,joke,note,nose,communicate&#xff0c;use&#xff0c;gate&#xff0c;same&#xff0c;late等。 给定一个字符串&#xff0c;以空格…

递归算法在编程中的重要应用

递归算法在编程中的重要应用 引言一、引言1.1、什么是递归算法&#xff1f;1.2、递归算法的特点和优缺点 二、树和图的遍历2.1、深度优先搜索&#xff08;DFS&#xff09;和广度优先搜索&#xff08;BFS&#xff09;2.2、二叉树遍历、树的深度、节点个数等问题2.2.1、二叉树遍历…

关于对【oracle索引】的理解与简述

【版权声明】未经博主同意&#xff0c;谢绝转载&#xff01;&#xff08;请尊重原创&#xff0c;博主保留追究权&#xff09; https://blog.csdn.net/m0_69908381/article/details/131094864 出自【进步*于辰的博客】 无论使用的是oracle、mysql&#xff0c;亦或者其他数据库&a…

如何吃透一个Java项目?

现在Austin的文档我觉得还是比较全的&#xff0c;但到了看代码的时候&#xff0c;可能有的同学就不知道应该怎么看&#xff0c;有想知道模块之间的调用链路&#xff0c;有想一点一点把细节给全看了。这时候就很可能在项目里犯迷糊了&#xff0c;绕不出不来了。 Java开源项目消息…

MySQL的下载安装以及环境配置---图文教程

目录 一.下载 二.安装 三.设置环境变量 四.MySQL数据库的使用及注意事项 SQL语句注意事项 一.下载 1.打开 MySQL 数据库的网站。 2.往下滑 3.进入新的页面之后&#xff0c;点击 MySQL Installer for Windows 4.进入新的页面时&#xff0c;就可以下载MySQL数据库了&#x…