当前位置:
首页 > temp > 简明python教程 >
-
Python爬虫:设置Cookie解决网站拦截并爬取蚂蚁短租
文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。
作者: 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
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程
检测数据类型的四种方法
js中数组的方法,32种方法
前端操作方法
数据类型
window.localStorage.setItem 和 localStorage.setIte
如何完美解决前端数字计算精度丢失与数