python爬虫获取子域名以及对“百度安全验证”问题的解决

这篇具有很好参考价值的文章主要介绍了python爬虫获取子域名以及对“百度安全验证”问题的解决。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

编写的python代码是在借鉴老师给的资料的基础上实现的

进行课堂实践:模仿bing搜索引擎域名收集功能,实现baidu搜索引擎的域名搜集功能时,走了不少弯路,最后终于形成了完整的思路。尤其是在“百度安全验证”问题上耗费的时间之久,就因为忽略了cookie的有效获取

公开信息搜集之子域名搜集的语法

  1. bing搜索引擎获取子域名的语法为:domain:[域名]
    eg:通过bing搜索引擎获取baidu.com域名下的子域名,需输入的语法为:domain:baidu.com
  2. baidu搜索引擎获取子域名的语法为:site:[域名]
    eg:通过baidu搜索引擎获取baidu.com域名下的子域名,需输入的语法为:site:baidu.com

编写python代码与实现过程

导入相应模块

import requests                                   #用于请求网页资源
from bs4 import BeautifulSoup            #用于处理获取的网页源码数据
from urllib.parse import urlparse        #用于处理url

"""若没有这些模块,可在安装的python文件下执行命令“pip install requests”或“pip install bs4”或“pip install urllib.parse”进行下载"""

在baidu搜索引擎上获取请求相应网页资源时,需要的部分请求头信息

注意:在进行子域名搜集之前,请确保已登录百度,否则获取的cookie不起作用,其他搜索引擎同理
未登录时的界面
爬虫 百度安全验证,搜索引擎,爬虫,python
获取无效cookie的运行结果
爬虫 百度安全验证,搜索引擎,爬虫,python
未登录时获取无效cookie来定义请求头,得到的响应内容为“百度安全验证”与“网络不给力,请稍后重试”、“返回首页”、“问题反馈”
出现此问题也还可能是请求头定义不完善被反爬了,从网上搜索的资料看大多是因为请求头缺少“Accept”
已登录后的界面
爬虫 百度安全验证,搜索引擎,爬虫,python

python爬虫需要定义请求头以绕过反扒机制,而定义请求头信息需从一下几步获取
  1. 进入百度搜索引擎首页,输入:site:baidu.com,这里以火狐浏览器为例
    爬虫 百度安全验证,搜索引擎,爬虫,python
  2. 按F12键进入开发者工具=》点击网络项=》Ctrl+R更新
    爬虫 百度安全验证,搜索引擎,爬虫,python
    爬虫 百度安全验证,搜索引擎,爬虫,python
    爬虫 百度安全验证,搜索引擎,爬虫,python
    爬虫 百度安全验证,搜索引擎,爬虫,python
  3. 查看子域名收集返回网页的网页源码,找出子域名所在的标签和书写格式,以便于编写代码获取
    爬虫 百度安全验证,搜索引擎,爬虫,python
  4. 代码编写
    #定义baidu搜索引擎的子域名搜集功能的函数
def baidu_search():
    Subdomain2 = []            #定义一个空列表用于存储收集到的子域名
    #定义请求头,绕过反爬机制
    hearders = {
       'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:104.0) Gecko/20100101 Firefox/104.0',
       'accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
       'referer':'',         #该请求没有来源网页可不填
       'cookie':'BAIDUID=23891A85BA85C16E5C9B5560154BA69C:FG=1; BIDUPSID=B6A72EB557B74FFA3D56BB80DB603C2C; PSTM=1663062807; BD_UPN=13314752; BDORZ=FFFB88E999055A3F8A630C64834BD6D0; BA_HECTOR=alal2001850g8l81252h8aqu1hi0t9e18; ZFY=SEUInM0ZuRBXFZUw1B0dlkNP:BZj3M:BZlpxlcZfdCgw8:C; BD_HOME=1; H_PS_PSSID=36558_37117_37354_37300_36885_34812_36802_36789_37145_37258_26350_37364; delPer=0; BD_CK_SAM=1; PSINO=7; BDRCVFR[Fc9oatPmwxn]=aeXf-1x8UdYcs; BDUSS=Zpc0MwUDE5bTZ4dUdQcUIxM2Z1SnFZMEpvUGpxTlRBWTBaTjZVdlh1V0tDRWxqRVFBQUFBJCQAAAAAAQAAAAEAAACnhFosAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIp7IWOKeyFjUD; H_PS_645EC=18db%2FxuyDIkSXG5WHmpOcEYdpAWQjJ77VSAYXPxhCINzCpt3nIF4SZssA6n9ATbCjzGM; BDSVRTM=247; baikeVisitId=e2c826a7-6934-4751-ac3d-29e118347887'
    }
    #定义请求url
    url = "https://www.baidu.com/s?wd=site:baidu.com&rsv_spt=1&rsv_iqid=0xce93ba97000245cf&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=monline_3_dg&rsv_enter=1&rsv_dl=tb&rsv_sug3=16&rsv_sug1=17&rsv_sug7=101&rsv_sug2=0&rsv_btype=t&inputT=175341&rsv_sug4=175341"
    resp = requests.get(url,headers=hearders)           #访问url,获取网页源码
    #print(resp.content.decode())等价于print(soup),变量soup在下面定义,是解析过的网页内容

    soup = BeautifulSoup(resp.content,'html.parser')    #创建一个BeautifulSoup对象,第一个参数是网页源码,第二个参数是Beautiful Soup 使用的 HTML 解析器,
    #print(soup)
    job_bt = soup.find_all('div',class_="result c-container xpath-log new-pmd")                        #find_all()查找源码中所有<div class_="result c-container xpath-log new-pmd"> 标签的内容
    
    for i in job_bt:                 #遍历获取的标签
        link = i.get('mu')           #获取属性mu的值              
        #urlparse是一个解析url的工具,scheme获取url的协议名,netloc获取url的网络位置
        domain = str(urlparse(link).scheme + "://" + urlparse(link).netloc)
        if domain in Subdomain2:              #如果解析后的domain存在于Subdomain2中则跳过,否则将domain存入子域名表中
            pass
        else:
            Subdomain2.append(domain)
            print(domain)
#调用函数baidu_search()
baidu_search() 
  1. 运行结果
    爬虫 百度安全验证,搜索引擎,爬虫,python

  2. 优化:给获取的子域名添加描述
    查看网页源码,找到子域名描述的位置
    爬虫 百度安全验证,搜索引擎,爬虫,python

#子域名的描述在标签<div class="result c-container xpath-log new-pmd">下的标签<div class="c-container">下的标签<h3>下的标签<a>的“标题”中
#获取标签“<a>"的“标题”的方法为get_text()

代码

  
    for i in job_bt:                 #遍历获取的标签
        link = i.get('mu')           #获取属性mu的值
        
        #获取子域名的描述,注意:变量的命名不可与关键字、方法名等重叠,否则会报错:"str" object is not callable
         string=i.find('div',class_="c-container").find('h3').find('a').get_text()     
                  
        #urlparse是一个解析url的工具,scheme获取url的协议名,netloc获取url的网络位置
        domain = str(urlparse(link).scheme + "://" + urlparse(link).netloc)
        if domain in Subdomain2:              #如果解析后的domain存在于Subdomain2中则跳过,否则将domain存入子域名表中
            pass
        else:
            Subdomain2.append(domain)
            print(domain+'\t'+string)  #输出进行字符串拼接

运行结果:
爬虫 百度安全验证,搜索引擎,爬虫,python文章来源地址https://www.toymoban.com/news/detail-787114.html

到了这里,关于python爬虫获取子域名以及对“百度安全验证”问题的解决的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Python爬虫 • selenium】selenium4新版本自动获取驱动的常见问题

    关于上次发布的文章《【Python爬虫 • selenium】selenium4新版本使用指南》很多人反馈说自动获取的驱动会导致闪退,本次文章给出详细配置。 首先说一下大家闪退的问题。我在低版本的python中,安装selenium,发现安装的是旧版本,并不是selenium4的版本,就导致用法还是selenium

    2024年01月17日
    浏览(44)
  • 解决百度网盘登录安全验证显示空白页

    不知道什么BUG,有的系统能直接验证,有的系统不能,对于我这种频繁换环境的是真的难受。 试过网上各种方法,什么重启、重装、在IE设置中添加信任站点、清除IE缓存都不行。 但是这些操作似乎有个共同点,没错,就是围绕着微软已经抛弃的IE。 那么重点来了,既然这个

    2024年02月07日
    浏览(38)
  • Python爬虫系列(二)——Python爬虫批量下载百度图片

    1. 前言 先贴代码 如果要使用上述程序的话,需要修改两个地方 : self.directory 这是本地存储地址,修改为自己电脑的地址,另外,**{}**不要删 spider.json_count = 10 这是下载的图像组数,一组有30张图像,10组就是三百张,根据需求下载 也可以去gitee仓库直接下载程序。 关于 py

    2023年04月08日
    浏览(32)
  • Python爬虫-使用Selenium模拟百度登录

        前面我已经安装好了Selenium并模拟成功了一下打开百度页面并进行查询,让我这个python初学者信心倍增,今天再来试一试百度登录 把打开百度的代码放到构造方法中 ps:那个文件目录是用于后面滑块验证图片保存的。 点击右上角的“登录”按钮,打开登录框, 代码如下:

    2024年02月06日
    浏览(42)
  • 【验证码逆向专栏】数美验证码全家桶逆向分析以及 AST 获取动态参数

    本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲

    2024年02月03日
    浏览(30)
  • Python爬虫实战(高级篇)—3百度翻译网页版爬虫(附完整代码)

    库 安装 js2py pip install js2py requests pip install requests 这里我们发现所需的参数: 1、sign(这是最重要的!!) 2、token 3、ts,时间戳 原帖查看

    2024年02月08日
    浏览(36)
  • 验证码:防范官网恶意爬虫攻击,保障用户隐私安全

    网站需要采取措施防止非法注册和登录,验证码是有效的防护措施之一。攻击者通常会使用自动化工具批量注册网站账号,以进行垃圾邮件发送、刷量等恶意活动。验证码可以有效阻止这些自动化工具,有效防止恶意程序或人员批量注册和登录网站。恶意程序或人员通常会使

    2024年02月04日
    浏览(29)
  • 【笔记】Python3|爬虫请求 CSRF-Token 时如何获取Token、Token过期、处理 CSRF-Token 需要注意的问题及示例

      CSRF-Token 机制是 Web 应用程序中常用的安全机制,它可以防止跨站请求伪造攻击,但会给爬虫造成一定的困扰。本文将介绍在使用 Python3 爬虫时, 处理 CSRF-Token 机制需要注意的问题及示例 。   在 Web 开发中,每次发送请求时,服务器都会生成一个 CSRF-Token。当用户访问

    2024年02月04日
    浏览(71)
  • python 爬虫 短信验证码

    在获得平台cookie的时候,发现很多平台都使用到了短信验证码来进行反扒,这种就挺抓头的,如果少量的账号还好,但是一旦账号较多,就很难受了,所以对于短信验证码的自动化获取就显得比较重要了,我来综述下我自己的解决过程吧。 总的来说就两种: 这个移动的‘无

    2024年02月02日
    浏览(26)
  • 【爬虫案例】用Python爬取百度热搜榜数据!

    目录 一、爬取目标 二、编写爬虫代码 三、同步视频讲解 四、完整源码 您好,我是@马哥python说,一名10年程序猿。 本次爬取的目标是:百度热搜榜 分别爬取每条热搜的: 热搜标题、热搜排名、热搜指数、描述、链接地址。 下面,对页面进行分析。 经过分析,此页面有XH

    2024年02月13日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包