鱼C论坛

 找回密码
 立即注册
查看: 437|回复: 3

这段代码爬虫为何没作用

[复制链接]
发表于 2024-1-16 17:14:26 | 显示全部楼层 |阅读模式

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

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

x
from urllib import request
from 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>

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

使用道具 举报

发表于 2024-1-16 17:15:22 | 显示全部楼层
这段代码的爬虫没有作用是因为百度对爬虫进行了安全验证,要求验证用户身份。为了绕过这个验证,你可以使用以下方法:

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': '[url=https://ip:port'}]https://ip:port'}[/url]
   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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2024-1-16 19:16:19 | 显示全部楼层
看起来估计是爬取次数太多触发安全验证了,要么等会儿再试,要么换个网络环境
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-17 09:11:49 | 显示全部楼层
isdkz 发表于 2024-1-16 19:16
看起来估计是爬取次数太多触发安全验证了,要么等会儿再试,要么换个网络环境

第一次爬就是这样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-22 01:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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