我们在编写Python爬虫时,有时会遇到网站拒绝访问等反爬手段,比如这么我们想爬取蚂蚁短租数据,它则会提示“当前访问疑似黑客攻击,已被网站管理员设置为拦截”提示,如下图所示。此时我们需要采用设置Cookie来进行爬取,下面我们进行详细介绍。非常感谢我的学生承峰提供的思想,后浪推前浪啊!

一. 网站分析与爬虫拦截

当我们打开蚂蚁短租搜索贵阳市,反馈如下图所示结果。

我们可以看到短租房信息呈现一定规律分布,如下图所示,这也是我们要爬取的信息。

通过浏览器审查元素,我们可以看到需要爬取每条租房信息都位于<dd></dd>节点下。

很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:810735403

在定位房屋名称,如下图所示,位于<div class="room-detail clearfloat"></div>节点下。

接下来我们写个简单的BeautifulSoup进行爬取。

# -*- coding: utf-8 -*-
import urllib
import re
from bs4 import BeautifulSoup
import codecsurl = 'http://www.mayi.com/guiyang/?map=no'
response=urllib.urlopen(url)
contents = response.read()
soup = BeautifulSoup(contents, "html.parser")
print soup.title
print soup
#短租房名称
for tag in soup.find_all('dd'):for name in tag.find_all(attrs={"class":"room-detail clearfloat"}):fname = name.find('p').get_text()print u'[短租房名称]', fname.replace('\n','').strip()

但很遗憾,报错了,说明蚂蚁金服防范措施还是挺到位的。

二. 设置Cookie的BeautifulSoup爬虫

添加消息头的代码如下所示,这里先给出代码和结果,再教大家如何获取Cookie。

# -*- coding: utf-8 -*-
import urllib2
import re
from bs4 import BeautifulSoup#爬虫函数
def gydzf(url):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"headers={"User-Agent":user_agent}request=urllib2.Request(url,headers=headers)response=urllib2.urlopen(request)contents = response.read()soup = BeautifulSoup(contents, "html.parser")for tag in soup.find_all('dd'):#短租房名称for name in tag.find_all(attrs={"class":"room-detail clearfloat"}):fname = name.find('p').get_text()print u'[短租房名称]', fname.replace('\n','').strip()#短租房价格for price in tag.find_all(attrs={"class":"moy-b"}):string = price.find('p').get_text()fprice = re.sub("[¥]+".decode("utf8"), "".decode("utf8"),string)fprice = fprice[0:5]print u'[短租房价格]', fprice.replace('\n','').strip()#评分及评论人数for score in name.find('ul'):fscore = name.find('ul').get_text()print u'[短租房评分/评论/居住人数]', fscore.replace('\n','').strip()#网页链接urlurl_dzf = tag.find(attrs={"target":"_blank"})urls = url_dzf.attrs['href']print u'[网页链接]', urls.replace('\n','').strip()urlss = 'http://www.mayi.com' + urls + ''print urlss#主函数
if __name__ == '__main__':i = 1while i<10:print u'页码', iurl = 'http://www.mayi.com/guiyang/' + str(i) + '/?map=no'gydzf(url)i = i+1else:print u"结束"

输出结果如下图所示:

页码 1
[短租房名称] 大唐东原财富广场--城市简约复式民宿
[短租房价格] 298
[短租房评分/评论/居住人数] 5.0分·5条评论·二居·可住3人
[网页链接] /room/851634765
http://www.mayi.com/room/851634765
[短租房名称] 大唐东原财富广场--清新柠檬复式民宿
[短租房价格] 568
[短租房评分/评论/居住人数] 2条评论·三居·可住6人
[网页链接] /room/851634467
http://www.mayi.com/room/851634467...页码 9
[短租房名称] 【高铁北站公园旁】美式风情+超大舒适安逸
[短租房价格] 366
[短租房评分/评论/居住人数] 3条评论·二居·可住5人
[网页链接] /room/851018852
http://www.mayi.com/room/851018852
[短租房名称] 大营坡(中大国际购物中心附近)北欧小清新三室
[短租房价格] 298
[短租房评分/评论/居住人数] 三居·可住6人
[网页链接] /room/851647045
http://www.mayi.com/room/851647045

接下来我们想获取详细信息

这里作者主要是提供分析Cookie的方法,使用浏览器打开网页,右键“检查”,然后再刷新网页。在“NetWork”中找到网页并点击,在弹出来的Headers中就隐藏这这些信息。

最常见的两个参数是Cookie和User-Agent,如下图所示:

然后在Python代码中设置这些参数,再调用Urllib2.Request()提交请求即可,核心代码如下:

user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) ... Chrome/61.0.3163.100 Safari/537.36"cookie="mediav=%7B%22eid%22%3A%22387123...b3574ef2-21b9-11e8-b39c-1bc4029c43b8"headers={"User-Agent":user_agent,"Cookie":cookie}request=urllib2.Request(url,headers=headers)response=urllib2.urlopen(request)contents = response.read()soup = BeautifulSoup(contents, "html.parser")for tag1 in soup.find_all(attrs={"class":"main"}):

注意,每小时Cookie会更新一次,我们需要手动修改Cookie值即可,就是上面代码的cookie变量和user_agent变量。完整代码如下所示:

import urllib2
import re
from bs4 import BeautifulSoup
import codecs
import csvc = open("ycf.csv","wb") #write 写
c.write(codecs.BOM_UTF8)
writer = csv.writer(c)
writer.writerow(["短租房名称","地址","价格","评分","可住人数","人均价格"])#爬取详细信息
def getInfo(url,fname,fprice,fscore,users):#通过浏览器开发者模式查看访问使用的user_agent及cookie设置访问头(headers)避免反爬虫,且每隔一段时间运行要根据开发者中的cookie更改代码中的cookieuser_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36"cookie="mediav=%7B%22eid%22%3A%22387123%22eb7; mayi_uuid=1582009990674274976491; sid=42200298656434922.85.130.130"headers={"User-Agent":user_agent,"Cookie":cookie}request=urllib2.Request(url,headers=headers)response=urllib2.urlopen(request)contents = response.read()soup = BeautifulSoup(contents, "html.parser")#短租房地址for tag1 in soup.find_all(attrs={"class":"main"}):print u'短租房地址:'for tag2 in tag1.find_all(attrs={"class":"desWord"}):address = tag2.find('p').get_text()print address#可住人数print u'可住人数:'for tag4 in tag1.find_all(attrs={"class":"w258"}):yy = tag4.find('span').get_text()print yyfname = fname.encode("utf-8")address = address.encode("utf-8")fprice = fprice.encode("utf-8")fscore = fscore.encode("utf-8")fpeople = yy[2:3].encode("utf-8")ones = int(float(fprice))/int(float(fpeople))#存储至本地writer.writerow([fname,address,fprice,fscore,fpeople,ones])#爬虫函数
def gydzf(url):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"headers={"User-Agent":user_agent}request=urllib2.Request(url,headers=headers)response=urllib2.urlopen(request)contents = response.read()soup = BeautifulSoup(contents, "html.parser")for tag in soup.find_all('dd'):#短租房名称for name in tag.find_all(attrs={"class":"room-detail clearfloat"}):fname = name.find('p').get_text()print u'[短租房名称]', fname.replace('\n','').strip()#短租房价格for price in tag.find_all(attrs={"class":"moy-b"}):string = price.find('p').get_text()fprice = re.sub("[¥]+".decode("utf8"), "".decode("utf8"),string)fprice = fprice[0:5]print u'[短租房价格]', fprice.replace('\n','').strip()#评分及评论人数for score in name.find('ul'):fscore = name.find('ul').get_text()print u'[短租房评分/评论/居住人数]', fscore.replace('\n','').strip()#网页链接urlurl_dzf = tag.find(attrs={"target":"_blank"})urls = url_dzf.attrs['href']print u'[网页链接]', urls.replace('\n','').strip()urlss = 'http://www.mayi.com' + urls + ''print urlssgetInfo(urlss,fname,fprice,fscore,user_agent)#主函数
if __name__ == '__main__':i = 0while i<33:print u'页码', (i+1)if(i==0):url = 'http://www.mayi.com/guiyang/?map=no'if(i>0):num = i+2 #除了第一页是空的,第二页开始按2顺序递增url = 'http://www.mayi.com/guiyang/' + str(num) + '/?map=no'gydzf(url)i=i+1c.close()

输出结果如下,存储本地CSV文件:

同时,大家可以尝试Selenium爬取蚂蚁短租,应该也是可行的方法。最后希望文章对您有所帮助,如果存在不足之处,请海涵~

在这里还是要推荐下我自己建的Python开发交流学习(qq)群:810735403,群里都是学Python开发的,如果你正在学习Python ,欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),包括我自己整理的一份2021最新的Python进阶资料和高级开发教程,欢迎进阶中和想深入Python的小伙伴!

Python爬虫:设置Cookie解决网站拦截并爬取蚂蚁短租相关推荐

  1. [python爬虫] BeautifulSoup设置Cookie解决网站拦截并爬取蚂蚁短租

    我们在编写Python爬虫时,有时会遇到网站拒绝访问等反爬手段,比如这么我们想爬取蚂蚁短租数据,它则会提示"当前访问疑似黑客攻击,已被网站管理员设置为拦截"提示,如下图所示.此时我 ...

  2. python爬虫cookie池 与ip绑定_Python爬虫:设置Cookie解决网站拦截并爬取蚂蚁短租

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: Eastmount PS:如有需要Python学习资料的小伙伴可以加 ...

  3. python爬虫--Scrapy框架--Scrapy+selenium实现动态爬取

    python爬虫–Scrapy框架–Scrapy+selenium实现动态爬取 前言 本文基于数据分析竞赛爬虫阶段,对使用scrapy + selenium进行政策文本爬虫进行记录.用于个人爬虫学习记 ...

  4. Python爬虫之scrapy框架360全网图片爬取

    Python爬虫之scrapy框架360全网图片爬取 在这里先祝贺大家程序员节快乐,在此我也有一个好消息送给大家,本人已开通了微信公众号,我会把资源放在公众号上,还请大家小手动一动,关注过微信公众号, ...

  5. Python爬虫系列之抖音热门视频爬取

    Python爬虫系列之抖音热门视频爬取 主要使用requests库以及手机抓包工具去分析接口 该demo仅供参考,已经失效,需要抖音2019年5月最新所有接口请点击这里获取 抖音资源获取接口文档请点击 ...

  6. Python爬虫入门 | 5 爬取小猪短租租房信息

    小猪短租是一个租房网站,上面有很多优质的民宿出租信息,下面我们以成都地区的租房信息为例,来尝试爬取这些数据. 小猪短租(成都)页面:http://cd.xiaozhu.com/   1.爬取租房标题 ...

  7. Python爬虫:最牛逼的 selenium爬取方式!

    Python爬虫:最牛逼的 selenium爬取方式! 作为一个男人 在最高光的时刻 这是小编准备的python爬虫学习资料,加群:700341555即可免费获取! Python爬虫:最牛逼的 sel ...

  8. Python爬虫:运用多线程、IP代理模块爬取百度图片上小姐姐的图片

    Python爬虫:运用多线程.IP代理模块爬取百度图片上小姐姐的图片 1.爬取输入类型的图片数量(用于给用户提示) 使用过百度图片的读者会发现,在搜索栏上输入关键词之后,会显示出搜索的结果,小编想大多 ...

  9. 疫情过去女朋友想去重庆玩,python批量爬取小猪短租重庆民宿信息

    疫情过去女朋友想去重庆玩,python批量爬取小猪短租重庆民宿信息 随着时间的流逝,在中国共产党的领导,全国人民的共同努力下,疫情逐渐受到了控制,逐渐好转,复工,开学有望.最近在和女朋友的闲聊当中得知 ...

最新文章

  1. java web里实现 mvc_MVC模式在Java Web应用程序中的实现
  2. 网易云信稳定背后的秘密
  3. 软件工程概论 课堂练习【空调公司维修服务流程】
  4. 30问提升技术人写作力-第1问作业
  5. go语言读取文件的方法-1
  6. 怎么制作html静态页面,如何做静态网页
  7. 110kv/35kv变电所无功补偿技术的研究+matlab仿真模型
  8. 三角函数到傅立叶级数
  9. Halcon根据两条线拟合中线
  10. Spring Boot 3.x特性-JSON(gson,jackson,json-b,fastjson)
  11. 浅谈跨站脚本攻击与防御
  12. 内核同步机制——蜗窝科技
  13. Arduino实验十四 无源蜂鸣器与有源蜂鸣器
  14. 基于构件技术的流程银行,再造核心竞争力
  15. 2017跨境电商把脉:未来会员经济将成新引擎?
  16. HOperatorSet.GrabImageAsync(out ho_Image, hv_AcqHandle, -1);出现异常
  17. 豆瓣电影---按分类爬取
  18. 【SQL开发实战技巧】系列(十六):数据仓库中时间类型操作(初级)日、月、年、时、分、秒之差及时间间隔计算
  19. elementUI el-table设置fixed后,竖向滚动条滚动到底部表格错位的问题(修改源码)
  20. 使用java语言pom依赖实现中文汉字转换拼音

热门文章

  1. latex中文加粗失效(楷体)
  2. video标签播放m3u8格式视频-------html页面
  3. 复星国际董事长郭广昌现身了
  4. 大数据-面试问题大全-持续更新
  5. 判断素数(质数)的方法
  6. BZOJ4554 [Tjoi2016Heoi2016]游戏
  7. n是否为质数c语言编程,C程序检查数字是否为质数
  8. Intellij IDEA 模板注释的设置
  9. 阿里云安全管家服务内容
  10. VSTS 更名为 Azure DevOps