当前位置:
首页 > 编程开发 > Python基础教程 >
-
python基础教程之Python爬虫:设置Cookie解决网站拦截并爬取蚂蚁短租
本站最新发布 Python从入门到精通|Python基础教程
试听地址 https://www.xin3721.com/eschool/pythonxin3721/
试听地址 https://www.xin3721.com/eschool/pythonxin3721/
文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。
作者: Eastmount
PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取
http://note.youdao.com/noteshare?id=3054cce4add8a909e784ad934f956cef
我们在编写Python爬虫时,有时会遇到网站拒绝访问等反爬手段,比如这么我们想爬取蚂蚁短租数据,它则会提示“当前访问疑似黑客攻击,已被网站管理员设置为拦截”提示,如下图所示。此时我们需要采用设置Cookie来进行爬取,下面我们进行详细介绍。非常感谢我的学生承峰提供的思想,后浪推前浪啊!
一. 网站分析与爬虫拦截
当我们打开蚂蚁短租搜索贵阳市,反馈如下图所示结果。 我们可以看到短租房信息呈现一定规律分布,如下图所示,这也是我们要爬取的信息。
通过浏览器审查元素,我们可以看到需要爬取每条租房信息都位于<dd></dd>节点下。 在定位房屋名称,如下图所示,位于<div class="room-detail clearfloat"></div>节点下。
接下来我们写个简单的BeautifulSoup进行爬取。
1 # -*- coding: utf-8 -*- 2 import urllib 3 import re 4 from bs4 import BeautifulSoup 5 import codecs 6 7 url = 'http://www.mayi.com/guiyang/?map=no' 8 response=urllib.urlopen(url) 9 contents = response.read() 10 soup = BeautifulSoup(contents, "html.parser") 11 print soup.title 12 print soup 13 #短租房名称 14 for tag in soup.find_all('dd'): 15 for name in tag.find_all(attrs={"class":"room-detail clearfloat"}): 16 fname = name.find('p').get_text() 17 print u'[短租房名称]', fname.replace('\n','').strip()
但很遗憾,报错了,说明蚂蚁金服防范措施还是挺到位的。
二. 设置Cookie的BeautifulSoup爬虫
添加消息头的代码如下所示,这里先给出代码和结果,再教大家如何获取Cookie。
1 # -*- coding: utf-8 -*- 2 import urllib2 3 import re 4 from bs4 import BeautifulSoup 5 6 7 #爬虫函数 8 def gydzf(url): 9 user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36" 10 headers={"User-Agent":user_agent} 11 request=urllib2.Request(url,headers=headers) 12 response=urllib2.urlopen(request) 13 contents = response.read() 14 soup = BeautifulSoup(contents, "html.parser") 15 for tag in soup.find_all('dd'): 16 #短租房名称 17 for name in tag.find_all(attrs={"class":"room-detail clearfloat"}): 18 fname = name.find('p').get_text() 19 print u'[短租房名称]', fname.replace('\n','').strip() 20 #短租房价格 21 for price in tag.find_all(attrs={"class":"moy-b"}): 22 string = price.find('p').get_text() 23 fprice = re.sub("[¥]+".decode("utf8"), "".decode("utf8"),string) 24 fprice = fprice[0:5] 25 print u'[短租房价格]', fprice.replace('\n','').strip() 26 #评分及评论人数 27 for score in name.find('ul'): 28 fscore = name.find('ul').get_text() 29 print u'[短租房评分/评论/居住人数]', fscore.replace('\n','').strip() 30 #网页链接url 31 url_dzf = tag.find(attrs={"target":"_blank"}) 32 urls = url_dzf.attrs['href'] 33 print u'[网页链接]', urls.replace('\n','').strip() 34 urlss = 'http://www.mayi.com' + urls + '' 35 print urlss 36 37 #主函数 38 if __name__ == '__main__': 39 i = 1 40 while i<10: 41 print u'页码', i 42 url = 'http://www.mayi.com/guiyang/' + str(i) + '/?map=no' 43 gydzf(url) 44 i = i+1 45 else: 46 print u"结束"
输出结果如下图所示:
1 页码 1 2 [短租房名称] 大唐东原财富广场--城市简约复式民宿 3 [短租房价格] 298 4 [短租房评分/评论/居住人数] 5.0分·5条评论·二居·可住3人 5 [网页链接] /room/851634765 6 http://www.mayi.com/room/851634765 7 [短租房名称] 大唐东原财富广场--清新柠檬复式民宿 8 [短租房价格] 568 9 [短租房评分/评论/居住人数] 2条评论·三居·可住6人 10 [网页链接] /room/851634467 11 http://www.mayi.com/room/851634467 12 13 ... 14 15 页码 9 16 [短租房名称] 【高铁北站公园旁】美式风情+超大舒适安逸 17 [短租房价格] 366 18 [短租房评分/评论/居住人数] 3条评论·二居·可住5人 19 [网页链接] /room/851018852 20 http://www.mayi.com/room/851018852 21 [短租房名称] 大营坡(中大国际购物中心附近)北欧小清新三室 22 [短租房价格] 298 23 [短租房评分/评论/居住人数] 三居·可住6人 24 [网页链接] /room/851647045 25 http://www.mayi.com/room/851647045
栏目列表
最新更新
关于django数据库迁移 以及显示未检测到更
Python爬虫:设置Cookie解决网站拦截并爬取
项目依赖包导出与导入
文件上传
开发工具的安装与使用(第一弹)
(重点)Python深入之Python内存管理机制你
30秒倒计时
这些好用却鲜为人知的Python库,你知道多
PythonI/O进阶学习笔记_7.python动态属性,
Python中最常见的10个问题(list)
.Net Standard(.Net Core)实现获取配置信息
Linux PXE + Kickstart 自动装机
Shell 编程 基础
Shell 编程 条件语句
CentOS8-网卡配置及详解
Linux中LVM逻辑卷管理
1.数码相框-相框框架分析(1)
Ubuntu armhf 版本国内源
Linux中raid磁盘阵列
搭建简易网站
mysql 安装了最新版本8.x版本后的报错:
Mysql空间数据&空间索引(spatial)
如何远程连接SQL Server数据库的图文教程
复制SqlServer数据库的方法
搜索sql语句
sql中返回参数的值
sql中生成查询的模糊匹配字符串
数据定义功能
数据操作功能
将Session值储存于SQL Server中