编写的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不起作用,其他搜索引擎同理
未登录时的界面

获取无效cookie的运行结果

未登录时获取无效cookie来定义请求头,得到的响应内容为“百度安全验证”与“网络不给力,请稍后重试”、“返回首页”、“问题反馈”
出现此问题也还可能是请求头定义不完善被反爬了,从网上搜索的资料看大多是因为请求头缺少“Accept”
已登录后的界面

python爬虫需要定义请求头以绕过反扒机制,而定义请求头信息需从一下几步获取

  1. 进入百度搜索引擎首页,输入:site:baidu.com,这里以火狐浏览器为例

  2. 按F12键进入开发者工具=》点击网络项=》Ctrl+R更新



  3. 查看子域名收集返回网页的网页源码,找出子域名所在的标签和书写格式,以便于编写代码获取
  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'}#定义请求urlurl = "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存入子域名表中passelse:Subdomain2.append(domain)print(domain)
#调用函数baidu_search()
baidu_search()
  1. 运行结果

  2. 优化:给获取的子域名添加描述
    查看网页源码,找到子域名描述的位置

#子域名的描述在标签<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 callablestring=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存入子域名表中passelse:Subdomain2.append(domain)print(domain+'\t'+string)  #输出进行字符串拼接

运行结果:

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

  1. python爬虫获取百度贴吧内容

    python爬虫获取百度贴吧内容 python爬虫获取百度贴吧内容 *声明:本文仅供学习交流使用,请勿用于商业用途,违者后果自负.* python爬虫获取百度贴吧内容 博主是一个比较懒的人,不会按时更 ...

  2. 用Python爬虫获取百度企业信用中企业基本信息!太厉害了!

    一.背景 希望根据企业名称查询其经纬度,所在的省份.城市等信息.直接将企业名称传给百度地图提供的API,得到的经纬度是非常不准确的,因此希望获取企业完整的地理位置,这样传给API后结果会更加准确.百度 ...

  3. Python 爬虫 - 获取百度关键字搜索内容

    Python 爬虫 获取百度关键字搜索内容 https://www.cnblogs.com/w0000/p/bd_search_page.html Github headers内的参数,仅有UA时,返 ...

  4. Python爬虫获取简书的用户、文章、评论、图片等数据,并存入数据库

    Python爬虫获取简书的用户.文章.评论.图片等数据,并存入数据库 爬虫定义:网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维 ...

  5. python Chrome + selenium自动化测试与python爬虫获取网页数据

    一.使用Python+selenium+Chrome 报错: selenium.common.exceptions.SessionNotCreatedException: Message: sessi ...

  6. python爬虫获取网络图片

    python爬虫获取网络图片 记录一下利用爬虫获取网络图片 具体操作来自博客:Python 爬虫系列教程一爬取批量百度图片 我的编辑器是vscode,首先安装三个包 pip install Beaut ...

  7. 使用Python爬虫获取豆瓣影评,并用词云显示

    使用Python爬虫获取豆瓣影评,并用词云显示 Python语言流行到现在,目前最受开发者喜爱的功能莫过于它的爬虫功能,以至于很多人以为Python的英语发音也是"爬虫",其实它是 ...

  8. Python爬虫获取电子书资源实战

    最近在学习Python,相对java来说python简单易学.语法简单,工具丰富,开箱即用,适用面广做全栈开发那是极好的,对于小型应用的开发,虽然运行效率慢点,但开发效率极高.大大提高了咱们的生产力. ...

  9. Python爬虫获取网页编码格式

    Python爬虫获取网页编码格式 网页编码格式是每个网页规定的本页面文字的编码方式,其中比较流行的是ascii, gbk, utf-8, iso等.观察许多网页的编码格式都是在meta标签的conte ...

最新文章

  1. PHP学习笔记-PHP语言基础3
  2. 关于anaconda顺利安装之后,cmd提示conda不是内部命令的问题
  3. 可重入锁和不可重入锁
  4. 关于IPv4设置一些常见问题的解答
  5. 每日一题(48)—— 中断
  6. grafana导出pdf监控日报
  7. 这款Java性能调优工具,真的很强!
  8. 阅读类app界面设计UI可临摹素材模板
  9. 【转】利用Eclipse编辑中文资源文件(application_zh_CN.properties )
  10. python读取math_python调用通达信公式,python读取通达信公式结果
  11. 线性代数【13】基,基本向量、坐标系的构建和线性生成空间SPAN (向量线性相关)
  12. 青春散场,挚爱郭敬明(一草著)【连载二】
  13. Android初级教程短信防火墙
  14. LTE-LAA中的LBT详解
  15. seata xid是什么_微服务分布式事务解决方案-springboot整合分布式seata1.3.0
  16. python实现牛顿法_牛顿法和最速下降法的Python实现
  17. 2010级清华计算机专业校友,清华计算机系主任答2010高考考生问-清华大学.PDF
  18. 英语不好,能不能学会编程?
  19. QT的核心机制信号和槽、QT三大护法
  20. 一个简单的PE感染病毒

热门文章

  1. 【JDK配置】雀氏纸尿裤,天才第一步
  2. 原来,数据分析还可以这样干......
  3. thinkphp5学习路程 三 数据库操作
  4. linux 未分配分区合并,这种情况如何扩展硬盘,合并硬盘分区,主分盘和未分配中间有个恢復分区,不能合并扩展硬盘!...
  5. 如何上联想官网查询服务器配置信息,联想服务器型号联想服务器如何鉴别!
  6. 百度地图总结第三篇之定位(我的位置)
  7. 谷歌大规模机器学习:模型训练、特征工程和算法选择 (32PPT下载)
  8. 服务器挂微信显示登陆异常怎么办,王者荣耀微信大区登录异常怎么办 王者荣耀微信提示网络繁忙/登录失败如何解决...
  9. 算法-求数组的子数组之和的最大值
  10. 第十四章 字符编码(补充)