详解python破解⽹站反爬⾍的两种简单⽅法
最近在学爬⾍时发现许多⽹站都有⾃⼰的反爬⾍机制,这让我们没法直接对想要的数据进⾏爬取,于是了解这种反爬⾍机制就会帮助我们到解决⽅法。
常见的反爬⾍机制有判别⾝份和IP限制两种,下⾯我们将⼀⼀来进⾏介绍。
(⼀) 判别⾝份
import requests
# ⾖瓣电影榜top250的⽹址
url = 'movie.douban/top250'
# 请求与⽹站的连接
res = (url)
# 打印获取的⽂本
)
这是段简单的请求与⽹站连接并打印获取数据的代码,我们来看看它的运⾏结果。
python爬虫开发我们可以发现我们什么数据都没有获取到,这就是由于这个⽹站有它的⾝份识别功能,把我们识别为了爬⾍,拒绝为我们提供数据。不管是浏览器还是爬⾍访问⽹站时都会带上⼀些信息⽤于⾝份识别。⽽这些信息都被存储在⼀个叫请求头(request headers) 的地⽅。⽽这个请求头中我们只需要了解其中的⼀个叫user-agent(⽤户代理) 的就可以了。user-agent⾥包含了操作系统、浏览器类型、版本等信息,通过修改它我们就能成功地伪装成浏览器。
下⾯我们来看怎么这个user-agent吧。
⾸先得打开浏览器,随便打开⼀个⽹站,再打开开发者⼯具。
再点击network标签,接着点第⼀个请求,再到Request Headers,最后到user-agent字段。(有时候可能点击network标签后是空⽩得,这时候刷新下⽹页就好啦!)
到请求头后,我们只需要把他放进⼀个字典⾥就好啦,具体操作见下⾯代码。
import requests
# 复制刚才获取得请求头
headers = {
'user-agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36' }
# ⾖瓣电影榜top250的⽹址
url = 'movie.douban/top250'
# 请求与⽹站的连接
res = (url, headers=headers)
# 打印获取的⽂本
)
现在我们再来看部分输出结果。
我们可以发现已经将该⽹站的HTML⽂件全部爬取到了,⾄此第⼀种⽅法就将完成了。下⾯我们来看第⼆种⽅法。
(⼆) IP限制
IP(Internet Protocol) 全称互联⽹协议地址,意思是分配给⽤户上⽹使⽤的⽹际协议的设备的数字标签。
它就像我们⾝份证号⼀样,只要知道你的⾝份证号就能查出你是哪个⼈。
当我们爬取⼤量数据时,如果我们不加以节制地访问⽬标⽹站,会使⽹站超负荷运转,⼀些个⼈⼩⽹站没什么反爬⾍措施可能因此瘫痪。⽽⼤⽹站⼀般会限制你的访问频率,因为正常⼈是不会在 1s 内访问⼏⼗次甚⾄上百次⽹站的。所以,如果你访问过于频繁,即使改了 user-agent 伪装成浏览器了,也还是会被识别为爬⾍,并限制你的 IP 访问该⽹站。
因此,我们常常使⽤ time.sleep() 来降低访问的频率,⽐如上⼀篇博客中的爬取整个⽹站的代码,我们每爬取⼀个⽹页就暂停⼀秒。
import requests
import time
from bs4 import BeautifulSoup
# 将获取⾖瓣电影数据的代码封装成函数
def get_douban_movie(url):
# 设置反爬⾍的请求头
headers = {
'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36'
}
# 请求⽹站的连接
res = ('movie.douban/top250', headers=headers)
# 将⽹站数据存到BeautifulSoup对象中
soup = ,'html.parser')
# 爬取⽹站中所有标签为'div',并且class='pl2'的数据存到Tag对象中
items = soup.find_all('div', class_='hd')
for i in items:
# 再筛选出所有标签为a的数据
tag = i.find('a')
# 只读取第⼀个class='title'作为电影名
name = tag.find(class_='title').text
# 爬取书名对应的⽹址
link = tag['href']
print(name,link)
url = 'movie.douban/top250?start={}&filter='
# 将所有⽹址信息存到列表中
urls = [url.format(num*25) for num in range(10)]
for item in urls:
get_douban_movie(item)
# 暂停 1 秒防⽌访问太快被封
time.sleep(1)
部分运⾏结果:
⾄此两种⽐较简单的应对反爬⾍⽅法就讲完啦,希望能对⼤家有所帮助,如果有问题,请及时给予我指正,感激不尽!以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。