当前位置:网站首页>三、实战---爬取百度指定词条所对应的结果页面(一个简单的页面采集器)
三、实战---爬取百度指定词条所对应的结果页面(一个简单的页面采集器)
2022-08-04 23:31:00 【beyond谚语】
在第一篇博文中也提及到User-Agent,表示请求载体的身份,也就是说明通过什么浏览器进行访问服务器的,这一点很重要。
① UA检测
门户网站服务器会检测请求载体的身份。如果检测到载体的身份表示为某一款浏览器的请求,则说明这是一个正常的请求;若检测到载体身份标识并不是基于任意一款浏览器,则说明这是一个非正常的请求也就是爬虫,服务器很有可能拒绝该请求!!!
② UA伪装
让爬虫对应的请求载体身份标识进行伪装成某一款浏览器
项目
项目概述:用户输入指定的关键词,之后通过百度搜索引擎查到的所有相关页面进行下载到本地
步骤:
① 打开百度,搜索任意关键字信息,查看地址栏信息
例如我这里搜索beyond
,地址栏信息为https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=baidu&wd=beyond&oq=%25E9%25BB%2584%25E5%25AE%25B6%25E9%25A9%25B9&rsv_pq=86cafe360003cde6&rsv_t=6497SlvSbubKeEQiJKGnLL%2BCucYyWr9OJTHOTd0x%2Bbx0%2BViW%2FN75Q0avW1M&rqlang=cn&rsv_enter=1&rsv_dl=tb&rsv_sug3=6&rsv_sug1=4&rsv_sug7=100&rsv_sug2=0&rsv_btype=t&inputT=964&rsv_sug4=965
实则有用信息仅为https://www.baidu.com/s?wd=beyond
,你也可以单独输入该网址仍可接收到服务器反馈的相同页面结果信息。(同理其他的搜索引擎也都类似)其中beyond为可变参数,遇到可变参数需要把其放入到字典中去
②整理完url之后,我们需要获取某个浏览器载体身份认证信息,这里以Chrome为例,随便打开一个网站(例如https://www.baidu.com/s?wd=beyond
),F12打开开发者工具,F5重新向服务器发出请求,Network下Name随便找一个点进入,就可以找到User-Agent信息,例如我的是这个User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36
,该信息就是Chrome浏览器的唯一身份认证标识
③在get方法中,传入User-Agent和用户输入的关键字信息即可(均为字典形式)
完整代码
import requests
if __name__ == '__main__':
#UA伪装,获取某个浏览器的User-Agent唯一载体身份标识
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'
}
#指定url
url = 'https://www.baidu.com/s?'#https://www.baidu.com/s?word=%E9%BB%84%E5%AE%B6%E9%A9%B9
#处理url携带的参数,将参数封装到字典中
keyword = input("please input a word:")
param = {
'wd':keyword
}
#对指定的url发起请求,对应的url是携带参数的,并且请求过程中已经处理了参数
response = requests.get(url=url,params=param,headers=headers)#若不传入headers这个User-Agent信息,运行程序之后,服务器并不会给这个响应返回数据信息。这说明百度搜索引擎中采用了UA检测反爬虫机制
#获取响应
page = response.text
filename = keyword+".html"
#持久化存储
with open('E:/Jupyter_workspace/study/python/'+filename,'w',encoding='utf-8') as fp:#将服务器返回的页面信息存储到本地指定路径
fp.write(page)
print(filename,"保存成功")
运行效果如下:
边栏推荐
- 为何越来越多人选择进入软件测试行业?深度剖析软件测试的优势...
- uniapp horizontal tab (horizontal scrolling navigation bar) effect demo (organization)
- MySQL基础篇【聚合函数】
- Based on the results of the facts
- [QNX Hypervisor 2.2用户手册]10.5 vdev ioapic
- [QNX Hypervisor 2.2用户手册]10.4 vdev hpet
- postman接口测试
- Bidding Announcement | Operation and Maintenance Project of Haina Baichuang Official Account
- App测试和Web测试的区别
- 直接插入排序
猜你喜欢
2022年全网最全接口自动化测试框架搭建,没有之一
~ hand AHB - APB Bridge 】 【 AMBA AHB bus
Community Sharing|Tencent Overseas Games builds game security operation capabilities based on JumpServer
安全软件 Avast 与赛门铁克诺顿 NortonLifeLock 合并案获英国批准,市值暴涨 43%
一点点读懂Thremal(二)
uniapp 分享功能-分享给朋友群聊朋友圈效果(整理)
Flutter启动流程(Skia引擎)介绍与使用
web3.js
KT6368A蓝牙的认证问题_FCC和BQB_CE_KC认证或者其它说明
从单体架构迁移到 CQRS 后,我觉得 DDD 并不可怕
随机推荐
Literature reading ten - Detect Rumors on Twitter by Promoting Information Campaigns with Generative Adversarial Learn
什么是次世代建模(附学习资料)
Service Mesh落地路径
typeScript-闭包函数的使用
自从新来了个字节20K出来的,就见识到了什么是天花板
基于内容的图像检索系统设计与实现--颜色信息--纹理信息--形状信息--PHASH--SHFT特征点的综合检测项目,包含简易版与完整版的源码及数据!
kernel hung_task死锁检测机制原理实现
安全软件 Avast 与赛门铁克诺顿 NortonLifeLock 合并案获英国批准,市值暴涨 43%
美团二面:Redis与MySQL双写一致性如何保证?
Since a new byte of 20K came out, I have seen what the ceiling is
「津津乐道播客」#397 厂长来了:怎样用科技给法律赋能?
Web安全开发 | 青训营笔记
【无标题】
【字符串函数内功修炼】strlen + strstr + strtok + strerror(三)
Basic web in PLSQL
Based on the results of the facts
Service Mesh landing path
仪表板展示 | DataEase看中国:数据呈现中国资本市场
建模师经验分享:模型学习方法
【七夕情人节特效】-- canvas实现满屏爱心