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

这篇具有很好参考价值的文章主要介绍了Python爬虫:从后端分析为什么你爬虫爬取不到数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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)

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

下面展示它的后端实现,只是举个例子哈!利用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>

界面效果如下:

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

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

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

Python爬虫:从后端分析为什么你爬虫爬取不到数据
通常可以通过上述这种方式判断你直接访问当前网页链接是否可以获取得到你想要的那些数据。

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

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

Python爬虫:从后端分析为什么你爬虫爬取不到数据
它的这个勋章实现效果我想应该是这样的,后端使用和方法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

运行结果:

Python爬虫:从后端分析为什么你爬虫爬取不到数据
这种后端实现和上述一致,看看前端代码:

<!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>

运行结果:

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

3. 找ajax请求接口

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

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

# -*- 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'])

运行结果:

Python爬虫:从后端分析为什么你爬虫爬取不到数据
这种后端实现如下:

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>

运行结果:

Python爬虫:从后端分析为什么你爬虫爬取不到数据
之所以后面两种情况,直接访问当前页面链接你访问不到相关数据,我想和页面加载顺序是有一定关系的,当然,这个点我也不是很清楚,希望上述所讲能帮助到大家哈!

4. 总结

下述为AI对于为什么爬虫爬取不到数据的分析:

有很多原因可能导致你的爬虫爬取不到数据,以下是一些常见的原因:

  1. 网站防爬虫机制:有些网站会设置反爬虫机制,如验证码、IP限制等。如果你的爬虫被识别为恶意行为,就会被禁止访问。

  2. 网络问题:如果你的网络连接不稳定,可能会导致爬虫访问失败或超时。

  3. 使用的爬虫框架或库问题:如果你使用的框架或库存在bug或者配置不正确,可能会导致爬取失败。

  4. 页面结构变化:有些网站的页面结构可能会不断变化,如果你的爬虫不及时更新,可能导致爬取失败。

  5. 数据提取规则错误:爬虫需要根据网页的结构和规则提取数据,如果你的规则设置不正确,可能会导致爬取不到需要的数据。文章来源地址https://www.toymoban.com/news/detail-487693.html

到了这里,关于Python爬虫:从后端分析为什么你爬虫爬取不到数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 爬虫为什么需要ip

    爬虫需要使用爬虫ip主要是为了解决以下问题: 1、反爬虫机制:许多网站会设置反爬虫机制来防止爬虫程序的访问,例如限制IP地址的访问频率、检测访问来源等。使用爬虫ip可以绕过这些限制,使得爬虫程序更难被检测到。 2、访问限制:有些网站可能会对某些地区的IP地址

    2024年02月02日
    浏览(21)
  • 爬虫时为什么需要代理?

    我们都知道爬虫时是需要代理地址介入的。使用代理可以隐藏你的真实IP地址,防止被网站封禁或限制访问。此外,代理还可以帮助你绕过地理限制,访问被封锁的网站或服务。但是请注意,使用代理也可能会带来一些风险,例如代理服务器可能会记录你的访问数据,或者代

    2024年02月06日
    浏览(20)
  • Socks IP轮换:为什么是数据挖掘和Web爬取的最佳选择?

            在数据挖掘和Web爬取的过程中,IP轮换是一个非常重要的概念。数据挖掘和Web爬取需要从多个网站或来源获取数据,而这些网站通常会对来自同一IP地址的请求进行限制或封锁。为了避免这些问题,数据挖掘和Web爬取过程中需要使用Socks IP轮换技术。在本文中,我们

    2024年02月14日
    浏览(12)
  • 爬虫为什么需要 HTTP 代理 IP?

    前言 爬虫在互联网数据采集、分析和挖掘中扮演着至关重要的角色,但是对于目标网站而言,频繁的爬虫请求可能会对其服务器产生不小的负担,严重的情况甚至会导致网站崩溃或者访问受限。为了避免这种情况的发生,同时也为了保护客户端的隐私和安全,爬虫使用HTTP代

    2024年02月07日
    浏览(16)
  • spring中,为什么前端明明传了值,后端却接收不到

    在进行前后端的联调时,有时候会出现,前端明明传了值,后端接口却接收不到的情况,这种情况常常让人很苦恼,然后就会去仔细对比前后端的参数单词是不是对应上了,也会去检查是不是前端的请求参数格式有问题,又或者是后端接口接收的参数格式有问题,一通检查对

    2024年02月03日
    浏览(18)
  • 初涉后端--为什么postman能够成功获取后端数据,前端项目却不能获取后端数据(已解决)

    刚学完前端,这几天初涉了一下后端,一开始就碰壁了,用写好的前端项目怎么都连接不上后端,但是奇怪的是明明postman可以成功请求到后端的数据 后端代码 postman测试结果,成功 前端网络提示 但是我注意到了前端响应状态为200,说明二者可能其实是连接上了的 最后通过查

    2024年02月02日
    浏览(21)
  • uniapp前端+python后端=微信小程序支付到底怎么开发???国内的资料为什么没一篇能讲清楚,简简单单的只需要3步就可以了-V2版本

    真的,在接到这个任务的时候,本以为很简单,不就是普通的浏览器复制粘贴,最不济找下gpt给生成一下,但是到实际开发就不同了,不是后端出问题就是前端,搜资料,上百度上google,基本每一个人讲的都不一样,不是这问题就是那问题,特别是微信官方,自己接口的逻辑

    2024年01月22日
    浏览(15)
  • 为什么爬虫要用高匿代理IP?高匿代理IP有什么优点

    只要搜代理IP,度娘就能给我们跳出很多品牌的推广,比如我们青果网路的。 正如你所看到的,我们厂商很多宣传用词都会用到高匿这2字。 这是为什么呢?高匿IP有那么重要吗? 这就需要我们从HTTP代理应用最多最广的:爬虫数据采集来说。 爬虫数据采集的时候,非常容易遇

    2024年02月12日
    浏览(14)
  • 《Go语言在微服务中的崛起:为什么Go是下一个后端之星?》

    🌷🍁 博主猫头虎🐅🐾 带您进入 Golang 语言的新世界✨✨🍁 🦄 博客首页 ——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文并茂🦖生动形象🐅简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍专栏》 🐾 学会IDEA常用操作,工作效率翻倍~💐 🌊 《100天精通

    2024年02月09日
    浏览(27)
  • 后端服务器的响应为什么能够精准的返回给请求它的那个客户端

    正向代理位于客户端和目标服务器之间,代表客户端发送请求;–》代理客户端 反向代理位于目标服务器和客户端之间,代表目标服务器接收请求。–》代理服务端 当客户端发送请求到反向代理服务器时,反向代理服务器会在转发请求给后端服务器之前,记录请求的源IP地址

    2024年02月12日
    浏览(16)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包