美文网首页
不会代码的你也能一键批量采集数据

不会代码的你也能一键批量采集数据

作者: 金玖壹拾 | 来源:发表于2023-03-02 17:16 被阅读0次

背景描述

最近需要收集百度搜索查询结果,可是使用的时候,发现之前的python脚本程序失效了。

这使我无法批量采集所需的关键词数据。

问题描述

启动python脚本程序后,获取的数据一直是空值。

request请求结果返回的html页面是百度安全验证页面。

问题演示

搜索了一下,知道这是百度设置的反爬机制。

如果请求被检测判定为非人类,则会返回此页面。

<!DOCTYPE html>
<html lang="zh-CN">
  <head>
    <meta charset="utf-8">
    <title>百度安全验证</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">
    <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0">
    <meta name="format-detection" content="telephone=no, email=no">
    <link rel="shortcut icon" href="https://www.baidu.com/favicon.ico" type="image/x-icon">
    <link rel="icon" sizes="any" mask href="https://www.baidu.com/img/baidu.svg">
    <meta http-equiv="X-UA-Compatible" content="IE=Edge">
    <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
    <link rel="stylesheet" href="https://ppui-static-wap.cdn.bcebos.com/static/touch/css/api/mkdjump_aac6df1.css" />
  </head>
  <body>
    <div class="timeout hide-callback">
      <div class="timeout-img"></div>
      <div class="timeout-title">网络不给力,请稍后重试</div>
      <button type="button" class="timeout-button">返回首页</button>
    </div>
    <div class="timeout-feedback hide-callback">
      <div class="timeout-feedback-icon"></div>
      <p class="timeout-feedback-title">问题反馈</p>
    </div>
    <script src="https://ppui-static-wap.cdn.bcebos.com/static/touch/js/mkdjump_v2_2d634b8.js"></script>
  </body>
</html>

我的思考

为了能够解决这个问题。

首先我猜想可能是请求头headers的数据过期了。

我通过浏览器F12,拿到最新的cookie,在代码中替换了cookie

初次尝试

尝试执行代码,结果失败。依旧是百度安全验证页面。

再次思考

我二次猜想,把浏览器中成功获取搜索结果的url,替换成我在代码中发起的请求url

当然,此时的cookie也是当前页面请求中发起的cookie

再次尝试

这次,代码是可以正常请求到数据的。

一个猜想

我替换了url中的关键词word,然后执行代码,又会返回安全验证。

我心想难道百度现在这么坑,一次搜索结果就要对应一个cookie么。

得出结果

头好痛,我可能要长脑子了。

终于脑子长出来了,我找到了突破口。

我发现用urllib库的request模块就可以正常请求得到网页数据。

既然这个模块可以拿到数据,就现从这一块入手。

编写代码进行测试。

req = urllib.request.Request(url, headers=headers)
response = urllib.request.urlopen(req)

html = response.read().decode('utf-8')
print(html)
html = etree.HTML(html)

可以拿到数据得到数据。

那就可以完善代码,实现自动翻页爬取分页数据了。

既然urllib库可以请求成功,那我之前的两个猜想就都是胡言乱语。

虽然我没有搞清楚为什么request库会被反爬机制制裁。

但是既然可以完成需求,那就先用着。

能跑就行(不是)。

附加彩蛋

在一度思索反爬原理而得不到结果的时候,我想到了借助网页采集工具来实现我的需求。

我便选择了八爪鱼采集器。

这个工具很强大,不需要懂代码,就可以完成网页数据的采集。

花了十分钟做了简单的配置我就在八爪鱼获得了想要的数据。

结语

此次实践目标是:收集百度搜索的词条数据。

使用了两种收集方式:

  1. python脚本
  2. 八爪鱼采集器

对比优缺点

  • 各自优点

python性能更好,可以对数据进行更为复杂的处理。

八爪鱼采集器上手简单,无需代码即可采集数据。

  • 各自缺点

python需要一定的编程基础,对小白不太友好。

八爪鱼采集器可以采集数据,但是只能做一些简单的逻辑处理判断。

疑点未解决

python脚本中request库模拟请求会被百度反爬机制干掉,但是urllib库的request模块模拟的请求可以正常使用,这背后的原因是什么。

相关文章

  • 2018-05-28

    需要自己开一个淘宝店铺,利用专业软件采集淘宝、天猫里面淘客热销商品,一键采集、一键过滤,一键自检、批量修改...

  • 上传文件实现数据采集以及批量导入数据库实例

    因为项目要求,需要读取本地文件,实现数据采集,然后批量导入数据库。 友情提示:下面代码中关于数据库的操作的代码有的...

  • 爬虫中国植物志、国家标本平台标本信息

    通过尝试,可以通过软件批量采集网页内指定信息,批量查询,也可尝试其他数据平台。

  • 2018-04-24

    分销宝采集阿里巴巴的货源渠道,一键批量上架到自己店铺,可以批量加差价,利用淘宝对新品的流量扶持;会对店铺带来一个自...

  • 操作亚马逊铺货模式你还在做表格上传吗?别被这个时代抛弃了

    批量采集 批量编辑 批量翻译 批量刊登

  • 数据采集器的三大分类

    批处理数据采集器离线式工作,数据批量采集器后,通过USB线或串口数据线跟计算机进行通信。 数据采集器内装有一个嵌入...

  • 做淘客的细节

    “店铺淘客”的核心原理呢就是用采集、复制工具在淘宝联盟里面将一些商家在淘宝联盟上做推广宝贝一键批量采集、复制到自己...

  • 走自己的路,让别人羡慕!

    淘客店铺玩法的核心原理就是什么? 用采集、复制工具在某宝联盟里面将一些商家在某宝联盟上做推广宝贝一键批量采集、复制...

  • 众享分销宝——流程展示

    登录页 电脑已登录 可快捷登录 店铺检测 违规过滤 采集货源 关键词设置 批量上货 设置更改 只能铺货,一键启动 ...

  • 批量处理线上数据注意事项

    操作数据对象:直接代码批量操作线上数据(例:修复错误数据,应需求处理老数据等) 注意事项: 1.能备份线上数据,在...

网友评论

      本文标题:不会代码的你也能一键批量采集数据

      本文链接:https://www.haomeiwen.com/subject/ntijldtx.html