【Python3爬虫】常见反爬虫措施及解决办法(二)

简介: 【Python3爬虫】常见反爬虫措施及解决办法(二) 这一篇博客,还是接着说那些常见的反爬虫措施以及我们的解决办法。同样的,如果对你有帮助的话,麻烦点一下推荐啦。   一、防盗链 这次我遇到的防盗链,除了前面说的Referer防盗链,还有Cookie防盗链和时间戳防盗链。

【Python3爬虫】常见反爬虫措施及解决办法(二)

这一篇博客,还是接着说那些常见的反爬虫措施以及我们的解决办法。同样的,如果对你有帮助的话,麻烦点一下推荐啦。

 

一、防盗链

这次我遇到的防盗链,除了前面说的Referer防盗链,还有Cookie防盗链和时间戳防盗链。Cookie防盗链常见于论坛、社区。当访客请求一个资源的时候,他会检查这个访客的Cookie,如果不是他自己的用户的Cookie,就不会给这个访客正确的资源,也就达到了防盗的目的。时间戳防盗链指的是在他的url后面加上一个时间戳参数,所以如果你直接请求网站的url是无法得到真实的页面的,只有带上时间戳才可以。

这次的例子是天涯社区的图片分社区

这里我们先打开开发者工具,然后任意选择一张图片,得到这个图片的链接,然后用requests来下载一下这张图片,注意带上Referer字段,看结果如何:

import requests

url = "http://img3.laibafile.cn/p/l/305989961.jpg"
headers = {
"Referer": "http://pp.tianya.cn/",
"UserAgent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36"
}
res = requests.get(url)
with open('test.jpg', 'wb') as f:
f.write(res.content)

我们的爬虫正常运行了,也看到生成了一个test.jpg文件,先别急着高兴,打开图片看一下:

一口老血吐了出来,竟然还有这种套路!怎么办呢?往下看!

解决办法:

既然他说仅供天涯社区用户分享,那我们也成为他的用户不就行了吗?二话不说就去注册了个账号,然后登录,再拿到登录后的Cookie:

__auc=90d515c116922f9f856bd84dd81; Hm_lvt_80579b57bf1b16bdf88364b13221a8bd=1551070001,1551157745; user=w=EW2QER&id=138991748&f=1; right=web4=n&portal=n; td_cookie=1580546065; __cid=CN; Hm_lvt_bc5755e0609123f78d0e816bf7dee255=1551070006,1551157767,1551162198,1551322367; time=ct=1551322445.235; __asc=9f30fb65169320604c71e2febf6; Hm_lpvt_bc5755e0609123f78d0e816bf7dee255=1551322450; __u_a=v2.2.4; sso=r=349690738&sid=&wsid=71E671BF1DF0B635E4F3E3E41B56BE69; temp=k=674669694&s=&t=1551323217&b=b1eaa77438e37f7f08cbeffc109df957&ct=1551323217&et=1553915217; temp4=rm=ef4c48449946624e9d7d473bc99fc5af; u_tip=138991748=0

注意:Cookie是有时效性的,具体多久就会失效我没测试。紧接着把Cookie添加到代码中,然后运行,可以看到成功把图片下载下来了:

搞了这么久才下了一张图片,我们怎么可能就这么满足呢?分析页面可知一个页面上有十五张图片,然后往下拉的时候会看到"正在加载,请稍后":

我们立马反应过来这是通过AJAX来加载的,于是打开开发者工具查看,可以找到如下内容:

 

可以看到每个链接“?”前面的部分都是基本一样的,“list_”后面跟的数字表示页数,而“_=”后面这一串数字是什么呢?有经验的人很快就能意识到这是一个时间戳,所以我们来测试一下:

import time
import requests

t = time.time()*1000
url = "http://pp.tianya.cn/qt/list_4.shtml?_={}".format(t)
res = requests.get(url)
print(res.text)

 运行之后得到了我们想要的结果。现在我们已经能用代码构造链接了,那我们怎么知道最多有多少页呢?我们先继续拖动滚轮下拉页面,发现出现第5页之后就没有了:

 

这怎么办呢?不急,我们不是已经能自己构造链接了嘛,我们可以通过改变“list”后面的数字来得到更多的页面啊。不过我自己测试的结果是最多只有15页,之后再怎么增大数字也没用了,应该是服务器做了限制,最多只给15页的数据。下图是我把数字改为16后返回的结果:

 

最后编写程序并运行,就能把图片下载下来了:

完整代码已上传到GitHub

 

二.随机化网页源码

用display:none来随机化网页源码,有网站还会随机类和id的名字,然后再加点随机的tr和td,这样的话就增大了我们解析的难度。比如全网代理IP

解决办法:

可以看到每个IP都是包含在一个class为“ip”的td里的,所以我们可以先定位到这个td,然后进行下一步解析。虽然这个td里面包含了很多的span标签和p标签,而且也每个标签的位置也没有什么规律,不过还是有办法解析的。方法就是把这个td里的所有文字提取出来,然后把那些前后重复的部分去除掉,最后拼接到一起就可以了,代码如下:

复制代码
1 et = etree.HTML(html)  # html:网页源码
2 for n in range(1, 21):
3     lst = et.xpath('//table/tbody/tr[{}]/td[1]//text()'.format(n))
4     proxy = ""
5     for i in range(len(lst) - 1):
6         if lst[i] != lst[i + 1]:
7             proxy += lst[i]
8     proxy += lst[-1]
9     print(proxy)
复制代码

最后就能得到我们想要的数据了。不过我们得到的端口数据和网页上显示的数据是不一样的,这是因为端口数据是经过了JS混淆的,至于怎么破解,下次会分享出来。

 原文地址https://www.cnblogs.com/TM0831/p/10436608.html

相关文章
|
7天前
|
数据采集 存储 JSON
Python爬虫开发:BeautifulSoup、Scrapy入门
在现代网络开发中,网络爬虫是一个非常重要的工具。它可以自动化地从网页中提取数据,并且可以用于各种用途,如数据收集、信息聚合和内容监控等。在Python中,有多个库可以用于爬虫开发,其中BeautifulSoup和Scrapy是两个非常流行的选择。本篇文章将详细介绍这两个库,并提供一个综合详细的例子,展示如何使用它们来进行网页数据爬取。
|
11天前
|
数据采集 数据可视化 算法
【优秀python案例】基于Python的豆瓣电影TOP250爬虫与可视化设计与实现
本文设计并实现了一个基于Python的豆瓣电影TOP250爬虫与可视化系统,通过获取电影评分、评论并应用词云和饼图等可视化技术,为用户提供了电影评价的直观展示和深入分析。
【优秀python案例】基于Python的豆瓣电影TOP250爬虫与可视化设计与实现
|
11天前
|
数据采集 数据可视化 关系型数据库
【python案例】基于Python 爬虫的房地产数据可视化分析设计与实现
本文设计并实现了一个基于Python爬虫的房地产数据可视化分析系统,通过BeautifulSoup框架采集房源信息,使用pandas进行数据处理,MySQL存储数据,并利用pyecharts进行数据可视化,以帮助用户更直观地了解房源信息并辅助选房购房。
|
11天前
|
机器学习/深度学习 数据采集 数据可视化
基于爬虫和机器学习的招聘数据分析与可视化系统,python django框架,前端bootstrap,机器学习有八种带有可视化大屏和后台
本文介绍了一个基于Python Django框架和Bootstrap前端技术,集成了机器学习算法和数据可视化的招聘数据分析与可视化系统,该系统通过爬虫技术获取职位信息,并使用多种机器学习模型进行薪资预测、职位匹配和趋势分析,提供了一个直观的可视化大屏和后台管理系统,以优化招聘策略并提升决策质量。
|
11天前
|
数据采集 监控 搜索推荐
基于python的百度资讯爬虫的设计与实现
本文介绍了一个基于Python语言的网络爬虫设计与实现,该爬虫利用urllib.request和BeautifulSoup库从百度新闻中抓取新闻标题、链接、内容摘要和来源信息,通过模拟浏览器行为和添加随机等待时间来规避反爬机制,为新闻数据分析和舆情监控提供支持。
|
11天前
|
搜索推荐 前端开发 数据可视化
【优秀python web毕设案例】基于协同过滤算法的酒店推荐系统,django框架+bootstrap前端+echarts可视化,有后台有爬虫
本文介绍了一个基于Django框架、协同过滤算法、ECharts数据可视化以及Bootstrap前端技术的酒店推荐系统,该系统通过用户行为分析和推荐算法优化,提供个性化的酒店推荐和直观的数据展示,以提升用户体验。
|
11天前
|
数据采集 XML 数据可视化
【优秀python案例】基于Python的口红商品的爬虫与可视化的设计与实现
本文介绍了一个基于Python的京东商城口红商品爬虫与可视化系统,通过requests和lxml库抓取商品信息,使用pandas进行数据处理,matplotlib进行数据可视化,分析了口红的价格、评论数(销量)分布以及自营口红品牌的销量和商品种类。
【优秀python案例】基于Python的口红商品的爬虫与可视化的设计与实现
|
8天前
|
数据采集 存储 JSON
Python爬虫
【8月更文挑战第11天】
27 14
|
1天前
|
数据采集 存储 中间件
Python进行网络爬虫:Scrapy框架的实践
【8月更文挑战第17天】网络爬虫是自动化程序,用于从互联网收集信息。Python凭借其丰富的库和框架成为构建爬虫的首选语言。Scrapy作为一款流行的开源框架,简化了爬虫开发过程。本文介绍如何使用Python和Scrapy构建简单爬虫:首先安装Scrapy,接着创建新项目并定义爬虫,指定起始URL和解析逻辑。运行爬虫可将数据保存为JSON文件或存储到数据库。此外,Scrapy支持高级功能如中间件定制、分布式爬取、动态页面渲染等。在实践中需遵循最佳规范,如尊重robots.txt协议、合理设置爬取速度等。通过本文,读者将掌握Scrapy基础并了解如何高效地进行网络数据采集。
20 6
|
10天前
|
数据采集 前端开发 JavaScript
CSS与Python爬虫
【8月更文挑战第9天】
16 8