Python爬虫 | 利用python爬虫处理某(du)反爬

简介: 这篇文章主要介绍了利用Python爬虫采集想要搜索的信息(利用某du的接口实现)并且处理掉它的反爬手段,文中示例代码很详细,具有一定的学习价值,感兴趣的小伙伴快来一起学习吧。

前言

大家在日常生活中经常需要查找不同的事物的相关信息,今天我们利用python来实现这一个小功能,同时呢,也是大家对基础知识的一个综合实践,相信有不少小伙伴已经准备跃跃欲试了,话不多说,开干!

个人简介

☀️大家好!我是新人小白博主朦胧的雨梦,希望大家多多关照和支持😝😝😝  

🌖大家一起努力,共同成长,相信我们都会遇到更好的自己👊👊👊

🌗期待我的文章能给各位带来收获和解决问题的灵感🤩🤩🤩

🌟大家的三连是我不断更新的动力~😘😘😘

本次爬虫思路

1. 获取url

2. 通过请求拿到响应

3. 处理反爬

4. 修改传递参数

5. 完善程序

一、urllib库

1.urllib库的介绍

urllib库是Python的标准库,提供了一系列用于操作URL的功能,其大部分功能与requests库类似,也有一些特别的用法。

urllib库是Python标准库提供的一个用户操作URL的模块,Python3把原来Python 2的urilib库和Urllib 2库合并成了一个Urllib库,现在讲解的就是Python3中的Urllib库。


urllib库含有4个模块,主要作用如下:


urllib.request——打开和读取URL;


urllib.error——包含Urllib.request各种错误的模块;


urlib.parse——解析URL;


urllib.robotparse——解析网站robots.txt文件。


2.urllib库的使用模板

importurllib.requesturl='xxxxxxxxxxxx'#发送请求                request=urllib.request.Request(url,data,header)#得到响应response=urllib.request.urlopen(request)#解码content=response.read().decode() 
#查看数据print(content)

3.使用urllib库获取数据

1. 获取URL:首先使用Chrome浏览器打开某度网页,随便输入一个:xxx,然后打开开发者工具(右键检查),切换到网络界面,清空记录,重新刷新页面,可以看到:

IMG_20230501_144957.jpg

如此这个URL就是我们需要获取的URL:https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E6%B3%95%E8%A7%A3%E5%86%B3%E6%96%B9%E6%B3%95&fenlei=256&rsv_pq=0x8dc81b9f001c02d3&rsv_t=1c35crTFwJXLFoeU8nF33RDMyj9nX%2FofGDNqUmHapdGRlUDmKmo7610WDRno*****&rqlang=en&rsv_dl=tb&rsv_sug3=7&rsv_enter=0&rsv_btype=i&inputT=2267&rsv_sug4=2878

分析:加粗的这一堆:就是法解决方法这几个关键字;

2.通过URL请求拿到响应:直接利用模板模拟浏览器发起请求:

IMG_20230501_145019.jpg

突然发现我们没有拿到想要的数据。难道是我们程序写错了吗?这时候就有的同学就开始抓狂了,呜呜呜(难受😔)......!

IMG_20230501_145030.jpg


3. 处理反爬: 莫急,俗话说人靠衣服马靠鞍,服务器就像大美女,你要打扮的帅帅的,才能获得美女的芳心,当然,这种方法是对于我们人来说的,你可别马上就给电脑喷香水啊,针对程序来说,我们就需要伪装,假装我是一个浏览器,那么,如何伪装呢?我们就需要携带一些参数,先试试这个:

user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36(主要是我们电脑浏览器的名称,版本信息),再试一次:

IMG_20230501_145044.jpg

成功“骗”过了服务器,这样就拿到了数据(高兴🥰),别着急,我们再思考一下,能不能通过修改一些参数,就让我们想找哪些数据就拿哪些数据,好,接下来我们就分析它的参数:

1. 修改传递参数

IMG_20230501_145107.jpg

wd:xx,它是这样传递我们输入的文字的,那么我们创造一个字典类型的键值对,发送请求时,再将这个参数拼接上去,这样不就实现了我们的需求嘛(特别注意编解码的问题)

IMG_20230501_145120.jpg

哈哈,这里百度第二个安全验证出来了,根本原因是我们携带的一些参数有问题,因为还有一些参数在变,但是对于我们入门的童鞋处理起来不太友好,所以常用三种方法

1.将wd后面的参数直接去掉;(成功率不高)

2.去掉HTTPS后面的是s,使用http协议;(成功率不高)

3.使用cookie;(比较稳定)

我选择使用第三种

IMG_20230501_145140.jpg

这样就利用urllib库实现了这个小功能。别着急,更简单的方法还在后面呢!😎😋

4.urllib库一些个人总结

1. urllib库在处理一些网址的时候比requests库更加快捷;

2.  urllib库涉及编解码的问题,必须手动添加;

3. 使用起来代码行数多,比较笨重。

是不是感觉全是缺点,正因如此,我们的requests库应运而生,简单快捷方便,是对它最清晰的写照,更加的人性化,接下来正式介绍这一大杀器,同时也希望大家尽量使用 requests库来写爬虫(真的很好很好很好用!🤩)。

二、requests库

5.requests库的介绍

requests库常用有这些功能:

1、Keep-Alive & 连接池

2、国际化域名和 URL

3、带持久 Cookie 的会话

4、自动内容解码

5、优雅的 key/value Cookie

6、Unicode 响应体

7、HTTP(S) 代理支持

6.requests库的使用模板

importrequestsurl='xxxxxxxxxxxx'#发送请求                              response=request.get(url,params,headers)  (get请求或者post请求)  
#根据响应的格式解码,非常智能response.encoding=response.appareent_encoding#打印数据print(response.txt)

7.使用requests库获取数据

布置爬虫的步骤在urllib库使用的时候已经非常详细的解释了,在此不在赘述,步骤相同,大家可以尝试用模板自己写一下(我个人的代码放在最后了)。如果有哪里不懂得,可以在评论区留言,博主会尽全力解答。

IMG_20230501_145130.jpg

8.requests库一些个人总结

1. requests库步骤简单;

2. 各种操作方法人性化,功能更加强大;

3. requests 库拥有完全自动化 Keep-alive 和 HTTP 连接池的功能,主要是突出Python的优雅二字。

个人建议(附代码)

1.部署爬虫时要先思考好大步骤,最好能把步骤写下来,然后一步一步逐步去写代码;

2.再仔细去浏览网页,确然好你爬的信息接口是哪个,是什么类型的请求,参数是什么,是存在网页本身还是二次加载进来的等等,一定要细心认真;

3.处理反爬时一般携带的参数就是:User-Agent,Cookie,Accept,Host,这几个,如果还是拿不到数据,那就是进阶了,暂时先不用管;

4.多观察几次请求,找到规律,实现规模式爬取(这也是爬虫的初心);

5.优化自己的程序,提高效率的同时又要避免被检测出来,多思考就会有灵感

request库代码:

importrequestsdata=input('输入你想要查找的数据:').split()
url='http://www.baidu.com/s'headers= {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36',
'Cookie': 'BIDUPSID=CDE3B4BEE7AE0D336C4D0734E42BCF8B; PSTM=1664331801; BAIDUID=CDE3B4BEE7AE0D33996D27FED1DDB4DB:FG=1; BD_UPN=12314753; BDUSS=JNdXVzTXMyWmFKM0x1VWJ5eG9GUjg4UmVCRFQxY1dtejBPVDFBfjc0VHhYRnRqRVFBQUFBJCQAAAAAAAAAAAEAAACse3WjanNuZGJpZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPHPM2PxzzNjTT; BDUSS_BFESS=JNdXVzTXMyWmFKM0x1VWJ5eG9GUjg4UmVCRFQxY1dtejBPVDFBfjc0VHhYRnRqRVFBQUFBJCQAAAAAAAAAAAEAAACse3WjanNuZGJpZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPHPM2PxzzNjTT; newlogin=1; ZFY=utLrULRdQjGdhXHuTriamg7jZ2PZMLmnKmUCBUiVrTw:C; BAIDUID_BFESS=CDE3B4BEE7AE0D33996D27FED1DDB4DB:FG=1; BA_HECTOR=ag04ah242k2l2h0la0010ofe1ho8t901f; BDORZ=FFFB88E999055A3F8A630C64834BD6D0; COOKIE_SESSION=765400_1_9_9_5_15_1_0_9_7_0_0_1292084_0_0_0_1668919087_1669684425_1669684425%7C9%234656831_6_1669684425%7C3; B64_BOT=1; BDRCVFR[7FEYkXni5q3]=mk3SLVN4HKm; BD_HOME=1; H_PS_PSSID=26350; BD_CK_SAM=1; PSINO=3; delPer=1; H_PS_645EC=3d48biiwjEvDlNFtMaUHuepsRu67OxRgPoEiOrMKvfRketUwB4GowDbv4KmDa%2BaTHUgCCoc; baikeVisitId=e1f583c7-eb15-4940-a709-054666f30f48; BDSVRTM=443'}
data= {
'wd': data}
response=requests.get(url=url, params=data, headers=headers)
response.encoding=response.apparent_encodingprint(response.text)

以上内容如有错误,欢迎大家指正,不胜感激,好了,今天就分享到这里,有什么想法记得评论区告诉我,期待大家的点赞和关注。😝

相关文章
|
14天前
|
数据采集 存储 API
网络爬虫与数据采集:使用Python自动化获取网页数据
【4月更文挑战第12天】本文介绍了Python网络爬虫的基础知识,包括网络爬虫概念(请求网页、解析、存储数据和处理异常)和Python常用的爬虫库requests(发送HTTP请求)与BeautifulSoup(解析HTML)。通过基本流程示例展示了如何导入库、发送请求、解析网页、提取数据、存储数据及处理异常。还提到了Python爬虫的实际应用,如获取新闻数据和商品信息。
|
18天前
|
数据采集 Python
【python】爬虫-西安医学院-校长信箱
本文以西安医学院-校长信箱为基础来展示爬虫案例。来介绍python爬虫。
【python】爬虫-西安医学院-校长信箱
|
1月前
|
数据采集 Python
爬虫实战-Python爬取百度当天热搜内容
爬虫实战-Python爬取百度当天热搜内容
72 0
|
24天前
|
数据采集 安全 Python
python并发编程:Python实现生产者消费者爬虫
python并发编程:Python实现生产者消费者爬虫
25 0
python并发编程:Python实现生产者消费者爬虫
|
1月前
|
数据采集 数据挖掘 调度
异步爬虫实践攻略:利用Python Aiohttp框架实现高效数据抓取
本文介绍了如何使用Python的Aiohttp框架构建异步爬虫,以提升数据抓取效率。异步爬虫利用异步IO和协程技术,在等待响应时执行其他任务,提高效率。Aiohttp是一个高效的异步HTTP客户端/服务器框架,适合构建此类爬虫。文中还展示了如何通过代理访问HTTPS网页的示例代码,并以爬取微信公众号文章为例,说明了实际应用中的步骤。
|
4天前
|
数据采集 存储 JSON
Python爬虫面试:requests、BeautifulSoup与Scrapy详解
【4月更文挑战第19天】本文聚焦于Python爬虫面试中的核心库——requests、BeautifulSoup和Scrapy。讲解了它们的常见问题、易错点及应对策略。对于requests,强调了异常处理、代理设置和请求重试;BeautifulSoup部分提到选择器使用、动态内容处理和解析效率优化;而Scrapy则关注项目架构、数据存储和分布式爬虫。通过实例代码,帮助读者深化理解并提升面试表现。
13 0
|
7天前
|
数据采集 JavaScript 前端开发
使用Python打造爬虫程序之破茧而出:Python爬虫遭遇反爬虫机制及应对策略
【4月更文挑战第19天】本文探讨了Python爬虫应对反爬虫机制的策略。常见的反爬虫机制包括User-Agent检测、IP限制、动态加载内容、验证码验证和Cookie跟踪。应对策略包括设置合理User-Agent、使用代理IP、处理动态加载内容、验证码识别及维护Cookie。此外,还提到高级策略如降低请求频率、模拟人类行为、分布式爬虫和学习网站规则。开发者需不断学习新策略,同时遵守规则和法律法规,确保爬虫的稳定性和合法性。
|
19天前
|
数据采集 存储 前端开发
Python爬虫如何快速入门
写了几篇网络爬虫的博文后,有网友留言问Python爬虫如何入门?今天就来了解一下什么是爬虫,如何快速的上手Python爬虫。
21 0
|
1月前
|
数据采集 存储 Web App开发
一键实现数据采集和存储:Python爬虫、Pandas和Excel的应用技巧
一键实现数据采集和存储:Python爬虫、Pandas和Excel的应用技巧
|
1月前
|
数据采集 前端开发 JavaScript
Python爬虫零基础到爬啥都行
Python爬虫项目实战全程实录,你想要什么数据能随意的爬,不管抓多少数据几分钟就能爬到你的硬盘,需要会基本的前端技术(HTML、CSS、JAVASCRIPT)和LINUX、MYSQL、REDIS基础。
20 1
Python爬虫零基础到爬啥都行