这段代码爬虫为何没作用
from urllib import requestfrom urllib import parse
from fake_useragent import UserAgent
# 拼接URL 地址
def get_url(word):
url = 'https://www.baidu.com/s?{}'
# 此处使用 urlencode() 进行编码
params = parse.urlencode({'wd':word})
url = url.format(params)
return url
# 发请求,保存本地文件
def request_url(url,filename):
ua = UserAgent()
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0'}
# 请求对象 + 响应对象 + 提取内容
req = request.Request(url=url, headers=headers)
res = request.urlopen(req)
html = res.read().decode('utf-8')
# 保存文件至本地
with open(filename, 'w', encoding='utf-8') as f:
f.write(html)
# 主程序入口
if __name__ == '__main__':
word = input('请输入搜索内容:')
url = get_url(word)
filename = word + '.html'
request_url(url,filename)
运行生成的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_21d1ae1.js"></script>
</body>
</html>
这段代码的爬虫没有作用是因为百度对爬虫进行了安全验证,要求验证用户身份。为了绕过这个验证,你可以使用以下方法:
1. 修改User-Agent:在headers中添加合适的User-Agent信息,使得请求看起来像是由真实的浏览器发送的,例如:
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
2. 使用代理IP:使用代理IP可以隐藏你的真实IP地址,以避免被服务器屏蔽。你可以从免费代理IP网站获取代理IP,并将其加入你的请求中,例如:
proxy = {'https': 'https://ip:port'}
req = request.Request(url=url, headers=headers, proxies=proxy)
3. 增加延时:让程序暂停一段时间再发送请求,减少请求频率,以避免被服务器识别为爬虫。你可以使用time模块的sleep()函数来实现,例如:
import time
time.sleep(1)# 暂停1秒钟
4. 使用验证码识别工具:如果你想要自动化地解决百度的验证码,你可以使用OCR(Optical Character Recognition,光学字符识别)技术,将验证码图片转化为文字,并自动填写验证码。
注意:爬取百度搜索结果页面是违反百度的使用条款的,百度有可能会阻止你的IP,因此在进行爬取时需要注意遵守网站的规则,并做好相应的防护措施。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 看起来估计是爬取次数太多触发安全验证了,要么等会儿再试,要么换个网络环境 isdkz 发表于 2024-1-16 19:16
看起来估计是爬取次数太多触发安全验证了,要么等会儿再试,要么换个网络环境
第一次爬就是这样
页:
[1]