网络爬虫出错
先给出下列代码import requests
def get_url(url):
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"}
res = requests.get(url,headers=headers)
return res
def main():
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("请输入要查找的内容:")
res = get_url(url)
print(res.text)
if __name__ == "__main__":
main()
但是运行的时候却出现了一下源码:
<!DOCTYPE html>
<!--STATUS OK-->
<html style="">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta name="referrer" content="always" />
<meta name="description" content="百度百科是一部内容开放、自由的网络百科全书,旨在创造一个涵盖所有领域知识,服务所有互联网用户的中文知识性百科全书。在这里你可以参与词条编辑,分享贡献你的知识。">
<title>
百度百科-验证</title>
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" />
<link rel="icon" sizes="any" mask href="//baikebcs.bdimg.com/cms/static/baike-icon.svg">
<meta itemprop="name" content="百度百科-验证">
<meta itemprop="description" content="">
<meta itemprop="image" content="https://bkssl.bdimg.com/cms/static/baike.png">
<!-->
<script>
(function() {
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(","),
i = e.length;
while (i--) {
document.createElement(e);
}
window.console = window.console || {};
var f = ['log', 'info', 'warning', 'error', 'clear'];
var l = f.length;
while(l--) {
window.console] = function () {};
}
})();
</script>
<!-->
<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"/>
</head>
<body class="w-small">
<script src="https://wappass.baidu.com/static/machine/js/api/mkd.js"></script>
<div id="app" class="anti-crawl"></div>
<div class="anti-crawl-mask"></div>
<script>
if (!window['__abbaidu_2020_subidgetf']) {
window['__abbaidu_2020_subidgetf'] = function () {
var subid = 01000000;
return subid;
};
}
</script>
<script async src="https://dlswbr.baidu.com/heicha/mw/abclite-2020-s.js"></script>
</body><script type="text/javascript" src="https://bkssl.bdimg.com/static/wiki-common/js/mod_1fc3215.js"></script>
<script type="text/javascript" src="https://bkssl.bdimg.com/static/wiki-common/pkg/vender-polyfill_f677fa3.js"></script>
<script type="text/javascript" src="https://bkssl.bdimg.com/static/wiki-common/pkg/wiki-common-jquery_2fd4e6c.js"></script>
<script type="text/javascript" src="https://bkssl.bdimg.com/static/wiki-common/pkg/vender-larkplayer_7eb2e49.js"></script>
<script type="text/javascript" src="https://bkssl.bdimg.com/static/wiki-common/pkg/wiki-common-lib-jsmart_3ff2da8.js"></script>
<script type="text/javascript" src="https://bkssl.bdimg.com/static/wiki-common/pkg/vender-util_ec62906.js"></script>
<script type="text/javascript" src="https://bkssl.bdimg.com/static/wiki-common/pkg/utils-datetime_1bc7409.js"></script>
<script type="text/javascript" src="https://bkssl.bdimg.com/static/wiki-common/pkg/utils-storage_f9507ec.js"></script>
<script type="text/javascript" src="https://bkssl.bdimg.com/static/wiki-common/pkg/wiki-common-ps-link_81d67c5.js"></script>
<script type="text/javascript" src="https://bkssl.bdimg.com/static/wiki-common/pkg/wiki-common-component_579b93e.js"></script>
<script type="text/javascript" src="https://bkssl.bdimg.com/static/wiki-common/pkg/wiki-common-lib_5ba5f53.js"></script>
<script type="text/javascript" src="https://bkssl.bdimg.com/static/wiki-common/pkg/utils-clickstream_5387ccf.js"></script>
<script type="text/javascript" src="https://bkssl.bdimg.com/static/wiki-common/pkg/utils-logger_3b8256e.js"></script>
<script type="text/javascript" src="https://bkssl.bdimg.com/static/wiki-common/pkg/wiki-common-util_008e364.js"></script>
<script type="text/javascript" src="https://bkssl.bdimg.com/static/wiki-common/node_modules/larkplayer-ui/dist/larkplayer-ui_9e08b02.js"></script>
<script type="text/javascript" src="https://bkssl.bdimg.com/static/wiki-common/pkg/wiki-common-lib-letv_0ef7211.js"></script>
<script type="text/javascript" src="https://bkssl.bdimg.com/static/wiki-common/pkg/wiki-common-ui_f89f6bd.js"></script>
<script type="text/javascript">!function(){ var $ = require('wiki-common:widget/lib/jquery/jquery');
var Dialog = require('wiki-common:widget/ui/dialog/dialog');
var ClickstreamSdk = require('wiki-common:widget/util/clickstreamSdk');
var clickstream = new ClickstreamSdk.default({
appname: 'baike',
platform: 'web',
device: 'pc',
page: 'spam',
auto: true
});
var sourceUrl = "https:\/\/baike.baidu.com\/item\/%E7%99%BE%E5%BA%A6%E7%99%BE%E7%A7%91";
var fromPage = "baike_pc_lemmapage_riskscore";
var logParam = {
page: 'spam',
fromPage: fromPage
}
clickstream.logActEvent($.extend({}, logParam, {'act_type': 'show'}));
function init() {
if (window.PassMachine && window.PassMachine.mkd) {
var PassMkd = window.PassMachine.mkd;
var instance = new PassMkd({
type: 'spin',
id: 'app',
ak: 'f30f335ff2449b9b92676c6916ed7990',
spinConfig: {
headTitle: '访问异常,请进行验证'
},
initApiSuccessFn: function() {
instance.initVcode();
},
verifySuccessFn: function (data) {
$.ajax({
type: 'GET',
url: '/api/anticrawl/captchaverify',
dataType: 'json',
data: {
ds: data.ds,
passTk: data.tk,
clientType: 'pc',
tk: "2cbec2a13f70ee0dd83e87fff74fec21",
sourceFrom: fromPage
},
success: function(res) {
if (res && res.errno === 0 && !res.isSpam) {
clickstream.logActEvent($.extend({}, logParam, {'act_type': 'verify-pass'}));
var reg = new RegExp(/^(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!\$&'\*\+,;=.]+$/);
sourceUrl.match(reg) ? window.location.href = sourceUrl : window.history.back();
} else {
var submitInform = Dialog.inform({
icon: 'WARNING',
mainMsg: '验证失败,请重新验证'
});
submitInform.show();
setTimeout(function() {
submitInform.hide();
}, 3000);
document.getElementById('app').childNodes.remove();
init();
}
}
});
}
});
}
};
init();
}();
!function(){ require('wiki-common:widget/component/psLink/psLink');
var clickstream = require('wiki-common:packages/utils/logger');
clickstream.logViewPage({
page: 'all-pc'
});
var tmpBaiduId = '';
require(['wiki-common:widget/util/setBaikeTmpBaiduId.es'], function (setBaikeTmpBaiduId, cookie) {
setBaikeTmpBaiduId(tmpBaiduId);
});
}();</script></html>
谁能告诉我这是为什么?怎么改正? 这个问题是因为百度百科的网站对爬虫进行了反爬虫处理,导致你的爬虫无法正常获取到页面内容。为了解决这个问题,你可以尝试以下几种方法:
1. 修改User-Agent:将User-Agent修改为一个常见的浏览器的User-Agent,如下所示:
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字段,指向一个合法的百度百科页面,如下所示:
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',
'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来加载页面并获取内容。
以上是一些常见的解决方法,你可以根据具体情况选择其中的一种或多种尝试。希望能帮到你! 根据你提供的代码和返回的源码,你的网络爬虫遇到了百度百科的反爬虫机制。百度百科通过验证机制识别爬虫,并返回一个验证页面。为了绕过这个验证页面,你可以尝试以下几种方法:
1. 使用会话(Session)来发送请求:创建一个会话对象,并在会话中发送请求。这样可以保持会话的状态,包括 cookie 和其他会话信息,这有助于绕过验证。
import requests
def get_url(url):
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"
}
session = requests.Session()
res = session.get(url, headers=headers)
return res
def main():
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"
res = get_url(url)
print(res.text)
if __name__ == "__main__":
main()
2. 添加延时:在发送请求之前添加一些延时,模拟人的访问行为。这可以减少触发反爬虫机制的概率。
import requests
import time
def get_url(url):
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"
}
time.sleep(2)# 添加延时
res = requests.get(url, headers=headers)
return res
def main():
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"
res = get_url(url)
print(res.text)
if __name__ == "__main__":
main()
3. 使用代理IP:使用代理IP发送请求,以隐藏真实的请求来源,从而绕过反爬虫机制。你可以使用第三方代理服务或购买付费代理IP。
需要注意的是,爬取网站数据时请确保遵守相关的法律法规和网站的使用条款,以及尊重网站的爬虫策略。使用爬虫时请合理、稳健地进行,避免对被爬取网站造成不必要的负担。
如果问题已经解决,请设置最佳答案 陶远航 发表于 2023-8-13 10:13
根据你提供的代码和返回的源码,你的网络爬虫遇到了百度百科的反爬虫机制。百度百科通过验证机制识别爬虫, ...
没有用 isdkz 发表于 2023-8-13 10:13
这个问题是因为百度百科的网站对爬虫进行了反爬虫处理,导致你的爬虫无法正常获取到页面内容。为了解决这个 ...
没用 Mta123456 发表于 2023-8-19 14:05
没有用
遇到安全验证了 陶远航 发表于 2023-8-19 14:14
遇到安全验证了
对啊 Mta123456 发表于 2023-8-19 15:00
对啊
这种不好搞,改用selenium吧 陶远航 发表于 2023-8-19 15:01
这种不好搞,改用selenium吧
我试试 陶远航 发表于 2023-8-19 15:01
这种不好搞,改用selenium吧
咋用来着?我忘了{:10_277:} Mta123456 发表于 2023-8-19 15:02
咋用来着?我忘了
拖拽滑块,具体代码忘记了 陶远航 发表于 2023-8-19 15:03
拖拽滑块,具体代码忘记了
…… 添加cookie信息就OK了昂。
页:
[1]