鱼C论坛

 找回密码
 立即注册
查看: 729|回复: 12

网络爬虫出错

[复制链接]
发表于 2023-8-13 10:12:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
先给出下列代码
  1. import requests

  2. def get_url(url):
  3.     headers = {'user-agent':"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36"}
  4.     res = requests.get(url,headers=headers)
  5.     return res

  6. def main():
  7.     url = "https://baike.baidu.com/item/2022%E5%B9%B4%E6%9D%AD%E5%B7%9E%E4%BA%9A%E8%BF%90%E4%BC%9A/18420947?fromtitle=%E6%9D%AD%E5%B7%9E%E4%BA%9A%E8%BF%90%E4%BC%9A&fromid=57094499"#"https://baike.baidu.com/item/%s" % input("请输入要查找的内容:")
  8.     res = get_url(url)
  9.     print(res.text)

  10. if __name__ == "__main__":
  11.     main()

复制代码


但是运行的时候却出现了一下源码:
  1. <!DOCTYPE html>
  2. <!--STATUS OK-->
  3. <html style="">


  4. <head>
  5. <meta charset="UTF-8">
  6. <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
  7. <meta name="referrer" content="always" />
  8. <meta name="description" content="百度百科是一部内容开放、自由的网络百科全书,旨在创造一个涵盖所有领域知识,服务所有互联网用户的中文知识性百科全书。在这里你可以参与词条编辑,分享贡献你的知识。">
  9. <title>
  10. 百度百科-验证</title>
  11. <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" />
  12. <link rel="icon" sizes="any" mask href="//baikebcs.bdimg.com/cms/static/baike-icon.svg">

  13. <meta itemprop="name" content="百度百科-验证">
  14. <meta itemprop="description" content="">
  15. <meta itemprop="image" content="https://bkssl.bdimg.com/cms/static/baike.png">

  16. <!--[if lte IE 9]>
  17. <script>

  18.     (function() {

  19.       var e = "abbr,article,aside,audio,canvas,datalist,details,dialog,eventsource,figure,footer,header,hgroup,mark,menu,meter,nav,output,progress,section,time,video".split(","),

  20.         i = e.length;

  21.       while (i--) {

  22.         document.createElement(e[i]);

  23.       }



  24.       window.console = window.console || {};

  25.       var f = ['log', 'info', 'warning', 'error', 'clear'];

  26.       var l = f.length;

  27.       while(l--) {

  28.         window.console[f[l]] = function () {};

  29.       }

  30.     })();

  31.   </script>
  32. <![endif]-->
  33. <link rel="stylesheet" type="text/css" href="https://bkssl.bdimg.com/static/wiki-common/pkg/wiki-common-base_633fa99.css"/><link rel="stylesheet" type="text/css" href="https://bkssl.bdimg.com/static/wiki-subpage/antiCrawl/antiCrawl_c71146b.css"/><link rel="stylesheet" type="text/css" href="https://bkssl.bdimg.com/static/wiki-common/widget/component/userbar-n/userbar-n_7cd7795.css"/><link rel="stylesheet" type="text/css" href="https://bkssl.bdimg.com/static/wiki-common/widget/lib/larkplayer/larkplayer_83ad94d.css"/><link rel="stylesheet" type="text/css" href="https://bkssl.bdimg.com/static/wiki-common/widget/lib/trumbowyg/plugins/colors/trumbowyg.colors_dd0d230.css"/><link rel="stylesheet" type="text/css" href="https://bkssl.bdimg.com/static/wiki-common/widget/lib/trumbowyg/trumbowyg_2e7ad35.css"/><link rel="stylesheet" type="text/css" href="https://bkssl.bdimg.com/static/wiki-common/widget/lib/watermark/watermark_a0a9ace.css"/><link rel="stylesheet" type="text/css" href="https://bkssl.bdimg.com/static/wiki-common/widget/lib/webuploader/webuploader_08d9db4.css"/>   
  34. </head>
  35. <body class="w-small">


  36. <script src="https://wappass.baidu.com/static/machine/js/api/mkd.js"></script>


  37. <div id="app" class="anti-crawl"></div>
  38. <div class="anti-crawl-mask"></div>


  39. <script>

  40.       if (!window['__abbaidu_2020_subidgetf']) {

  41.         window['__abbaidu_2020_subidgetf'] = function () {

  42.             var subid = 01000000;

  43.             return subid;

  44.         };

  45.       }

  46.     </script>
  47. <script async src="https://dlswbr.baidu.com/heicha/mw/abclite-2020-s.js"></script>

  48. </body><script type="text/javascript" src="https://bkssl.bdimg.com/static/wiki-common/js/mod_1fc3215.js"></script>
  49. <script type="text/javascript" src="https://bkssl.bdimg.com/static/wiki-common/pkg/vender-polyfill_f677fa3.js"></script>
  50. <script type="text/javascript" src="https://bkssl.bdimg.com/static/wiki-common/pkg/wiki-common-jquery_2fd4e6c.js"></script>
  51. <script type="text/javascript" src="https://bkssl.bdimg.com/static/wiki-common/pkg/vender-larkplayer_7eb2e49.js"></script>
  52. <script type="text/javascript" src="https://bkssl.bdimg.com/static/wiki-common/pkg/wiki-common-lib-jsmart_3ff2da8.js"></script>
  53. <script type="text/javascript" src="https://bkssl.bdimg.com/static/wiki-common/pkg/vender-util_ec62906.js"></script>
  54. <script type="text/javascript" src="https://bkssl.bdimg.com/static/wiki-common/pkg/utils-datetime_1bc7409.js"></script>
  55. <script type="text/javascript" src="https://bkssl.bdimg.com/static/wiki-common/pkg/utils-storage_f9507ec.js"></script>
  56. <script type="text/javascript" src="https://bkssl.bdimg.com/static/wiki-common/pkg/wiki-common-ps-link_81d67c5.js"></script>
  57. <script type="text/javascript" src="https://bkssl.bdimg.com/static/wiki-common/pkg/wiki-common-component_579b93e.js"></script>
  58. <script type="text/javascript" src="https://bkssl.bdimg.com/static/wiki-common/pkg/wiki-common-lib_5ba5f53.js"></script>
  59. <script type="text/javascript" src="https://bkssl.bdimg.com/static/wiki-common/pkg/utils-clickstream_5387ccf.js"></script>
  60. <script type="text/javascript" src="https://bkssl.bdimg.com/static/wiki-common/pkg/utils-logger_3b8256e.js"></script>
  61. <script type="text/javascript" src="https://bkssl.bdimg.com/static/wiki-common/pkg/wiki-common-util_008e364.js"></script>
  62. <script type="text/javascript" src="https://bkssl.bdimg.com/static/wiki-common/node_modules/larkplayer-ui/dist/larkplayer-ui_9e08b02.js"></script>
  63. <script type="text/javascript" src="https://bkssl.bdimg.com/static/wiki-common/pkg/wiki-common-lib-letv_0ef7211.js"></script>
  64. <script type="text/javascript" src="https://bkssl.bdimg.com/static/wiki-common/pkg/wiki-common-ui_f89f6bd.js"></script>
  65. <script type="text/javascript">!function(){    var $ = require('wiki-common:widget/lib/jquery/jquery');
  66.     var Dialog = require('wiki-common:widget/ui/dialog/dialog');
  67.     var ClickstreamSdk = require('wiki-common:widget/util/clickstreamSdk');
  68.     var clickstream = new ClickstreamSdk.default({
  69.         appname: 'baike',
  70.         platform: 'web',
  71.         device: 'pc',
  72.         page: 'spam',
  73.         auto: true
  74.     });
  75.     var sourceUrl = "https:\/\/baike.baidu.com\/item\/%E7%99%BE%E5%BA%A6%E7%99%BE%E7%A7%91";
  76.     var fromPage = "baike_pc_lemmapage_riskscore";
  77.     var logParam = {
  78.         page: 'spam',
  79.         fromPage: fromPage
  80.     }
  81.     clickstream.logActEvent($.extend({}, logParam, {'act_type': 'show'}));

  82.     function init() {
  83.         if (window.PassMachine && window.PassMachine.mkd) {
  84.             var PassMkd = window.PassMachine.mkd;
  85.             var instance = new PassMkd({
  86.                 type: 'spin',
  87.                 id: 'app',
  88.                 ak: 'f30f335ff2449b9b92676c6916ed7990',
  89.                 spinConfig: {
  90.                     headTitle: '访问异常,请进行验证'
  91.                 },
  92.                 initApiSuccessFn: function() {
  93.                     instance.initVcode();
  94.                 },
  95.                 verifySuccessFn: function (data) {
  96.                     $.ajax({
  97.                         type: 'GET',
  98.                         url: '/api/anticrawl/captchaverify',
  99.                         dataType: 'json',
  100.                         data: {
  101.                             ds: data.ds,
  102.                             passTk: data.tk,
  103.                             clientType: 'pc',
  104.                             tk: "2cbec2a13f70ee0dd83e87fff74fec21",
  105.                             sourceFrom: fromPage
  106.                         },
  107.                         success: function(res) {
  108.                             if (res && res.errno === 0 && !res.isSpam) {
  109.                                 clickstream.logActEvent($.extend({}, logParam, {'act_type': 'verify-pass'}));
  110.                                 var reg = new RegExp(/^(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!\$&'\*\+,;=.]+$/);
  111.                                 sourceUrl.match(reg) ? window.location.href = sourceUrl : window.history.back();
  112.                             } else {
  113.                                 var submitInform = Dialog.inform({
  114.                                 icon: 'WARNING',
  115.                                 mainMsg: '验证失败,请重新验证'
  116.                                 });
  117.                                 submitInform.show();
  118.                                 setTimeout(function() {
  119.                                     submitInform.hide();
  120.                                 }, 3000);
  121.                                 document.getElementById('app').childNodes[0].remove();
  122.                                 init();
  123.                             }
  124.                         }
  125.                     });
  126.                 }
  127.             });
  128.         }
  129.     };
  130.     init();
  131. }();
  132. !function(){      require('wiki-common:widget/component/psLink/psLink');

  133.       var clickstream = require('wiki-common:packages/utils/logger');

  134.       clickstream.logViewPage({

  135.         page: 'all-pc'

  136.       });

  137.       var tmpBaiduId = '';

  138.       require(['wiki-common:widget/util/setBaikeTmpBaiduId.es'], function (setBaikeTmpBaiduId, cookie) {

  139.         setBaikeTmpBaiduId(tmpBaiduId);

  140.       });

  141.     }();</script></html>
复制代码

谁能告诉我这是为什么?怎么改正?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-13 10:13:17 | 显示全部楼层
这个问题是因为百度百科的网站对爬虫进行了反爬虫处理,导致你的爬虫无法正常获取到页面内容。为了解决这个问题,你可以尝试以下几种方法:

1. 修改User-Agent:将User-Agent修改为一个常见的浏览器的User-Agent,如下所示:
  1. headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36'}
复制代码


2. 添加Referer头部:在请求头部中添加Referer字段,指向一个合法的百度百科页面,如下所示:
  1. headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36',
  2.            'Referer': 'https://baike.baidu.com/item/%E7%99%BE%E5%BA%A6%E7%99%BE%E7%A7%91'}
复制代码


3. 使用代理IP:通过使用代理IP来隐藏你的真实IP地址,以避免被封禁。你可以使用一些第三方的代理IP服务,或者自己搭建代理池。

4. 使用Selenium模拟浏览器操作:Selenium是一个自动化测试工具,可以模拟用户在浏览器中的操作。你可以使用Selenium来加载页面并获取内容。

以上是一些常见的解决方法,你可以根据具体情况选择其中的一种或多种尝试。希望能帮到你!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-13 10:13:56 | 显示全部楼层
根据你提供的代码和返回的源码,你的网络爬虫遇到了百度百科的反爬虫机制。百度百科通过验证机制识别爬虫,并返回一个验证页面。为了绕过这个验证页面,你可以尝试以下几种方法:

1. 使用会话(Session)来发送请求:创建一个会话对象,并在会话中发送请求。这样可以保持会话的状态,包括 cookie 和其他会话信息,这有助于绕过验证。

  1. import requests

  2. def get_url(url):
  3.     headers = {
  4.         'user-agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36"
  5.     }
  6.     session = requests.Session()
  7.     res = session.get(url, headers=headers)
  8.     return res

  9. def main():
  10.     url = "https://baike.baidu.com/item/2022%E5%B9%B4%E6%9D%AD%E5%B7%9E%E4%BA%9A%E8%BF%90%E4%BC%9A/18420947?fromtitle=%E6%9D%AD%E5%B7%9E%E4%BA%9A%E8%BF%90%E4%BC%9A&fromid=57094499"
  11.     res = get_url(url)
  12.     print(res.text)

  13. if __name__ == "__main__":
  14.     main()
复制代码


2. 添加延时:在发送请求之前添加一些延时,模拟人的访问行为。这可以减少触发反爬虫机制的概率。

  1. import requests
  2. import time

  3. def get_url(url):
  4.     headers = {
  5.         'user-agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36"
  6.     }
  7.     time.sleep(2)  # 添加延时
  8.     res = requests.get(url, headers=headers)
  9.     return res

  10. def main():
  11.     url = "https://baike.baidu.com/item/2022%E5%B9%B4%E6%9D%AD%E5%B7%9E%E4%BA%9A%E8%BF%90%E4%BC%9A/18420947?fromtitle=%E6%9D%AD%E5%B7%9E%E4%BA%9A%E8%BF%90%E4%BC%9A&fromid=57094499"
  12.     res = get_url(url)
  13.     print(res.text)

  14. if __name__ == "__main__":
  15.     main()
复制代码


3. 使用代理IP:使用代理IP发送请求,以隐藏真实的请求来源,从而绕过反爬虫机制。你可以使用第三方代理服务或购买付费代理IP。

需要注意的是,爬取网站数据时请确保遵守相关的法律法规和网站的使用条款,以及尊重网站的爬虫策略。使用爬虫时请合理、稳健地进行,避免对被爬取网站造成不必要的负担。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-19 14:05:45 | 显示全部楼层
陶远航 发表于 2023-8-13 10:13
根据你提供的代码和返回的源码,你的网络爬虫遇到了百度百科的反爬虫机制。百度百科通过验证机制识别爬虫, ...

没有用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-19 14:06:42 | 显示全部楼层
isdkz 发表于 2023-8-13 10:13
这个问题是因为百度百科的网站对爬虫进行了反爬虫处理,导致你的爬虫无法正常获取到页面内容。为了解决这个 ...

没用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-19 14:14:58 | 显示全部楼层

遇到安全验证了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-19 15:00:57 | 显示全部楼层

对啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-19 15:01:37 | 显示全部楼层

这种不好搞,改用selenium吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-19 15:01:56 | 显示全部楼层
陶远航 发表于 2023-8-19 15:01
这种不好搞,改用selenium吧

我试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-19 15:02:38 | 显示全部楼层
陶远航 发表于 2023-8-19 15:01
这种不好搞,改用selenium吧

咋用来着?我忘了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-19 15:03:29 | 显示全部楼层
Mta123456 发表于 2023-8-19 15:02
咋用来着?我忘了

拖拽滑块,具体代码忘记了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-19 15:04:12 | 显示全部楼层
陶远航 发表于 2023-8-19 15:03
拖拽滑块,具体代码忘记了

……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-25 17:24:16 | 显示全部楼层
添加cookie信息就OK了昂。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-1 12:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表