专栏首页HUBU生信python爬虫:爬取58同城武汉地区商品房信息(最后碰到了58同城的反爬机制,吓得我不敢说话···)

python爬虫:爬取58同城武汉地区商品房信息(最后碰到了58同城的反爬机制,吓得我不敢说话···)

今天外面天气有些古怪,女朋友明天又要考试,整整一天都在图书馆背书。遇到这种情况,像我这么懒的人,肯定就只有在宿舍玩游戏了。 可是,,,玩游戏真的很无聊耶,我都玩腻了。所以,写完线代作业,只好又来了解一下数据结构和python。这波理由很充分,哈哈哈哈

本来是想来试着爬一下雷军的微博信息的。 可是微博,根本就不给真正的url··· (大公司嘛,程序员多,可以为所欲为) 上知乎逛了一圈,要用cookies保存登陆信息,然后调用json库,模拟人类点击浏览器?!然而我http协议都还没有了解,就让我去找cookies?!我拒绝!

趁着无聊,就了解了一下http协议,以及浏览器工作的原理。 于是乎知道了一串名词:TCP三次握手,ACK,syn包,TCP/IP协议,DNS,主机名,状态行,丢包etc(很社会···列在这里其实是想当一个名词解释,大家自己去了解一下,如果需要,我也可以些篇介绍这些概念的文章) 想来想去,还是拿58同城来练练手。据说武汉房价又涨了,所以多看看房子信息,可以壮壮胆嘛(去TMD壮胆····我想睡觉)

废话说的有点多了,现在进入正题。

首先,还是和之前一样,打开58同城的网页,打开开发者选项F12,进行网页分析:

我个人喜欢用记事本复制代码,帮助自己来分析:

具体分析的过程,我就不详细说了,专栏的前几篇都有仔细分析,大家可以看一下:

我爱小徐子:(python小白必看!)python爬虫详细讲解:静态单网页的内容爬取 爬取对象:百度贴吧湖北大学吧 ​zhuanlan.zhihu.com 图标 今天遇到的一个主要问题,还是之前在文章中写到的,对标签使用text.strip()方法时,无法提取出来标签中的文字信息,总是报错。 所以,我今天对单网页进行了一个测试,测试代码如下:

In [1]: import  requests

In [2]: from  bs4  import  BeautifulSoup

In [3]: import  pandas  as  pd

In [4]: from   pandas  import  DataFrame

In [5]: import  numpy  as  np

In [6]: head={}

In [7]: head['User-Agent']="Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36"

In [8]: url="http://wh.58.com/ershoufang/pn3/"

In [9]: r=requests.get(url,headers=head)

In [10]: r=r.text
In [12]: soup=BeautifulSoup(r,'lxml')

In [13]: Tags=soup.find_all('li')

In [14]: title_list=[]

In [15]: http_list=[]

In [16]: for li  in  Tags:
    ...:     try:
    ...:         li
    ...:         try:
    ...:             http_list.append(li.find('a')["href"])
    ...:             title_list.append(li.find('h2',attrs={"class":"title"}).text.strip())
    ...:         except:
    ...:             continue
    ...:     except:
    ...:         continue

在循环之中加上了两层异常处理机制,设置head头的目的是,防止服务器发现采取反爬措施(之后就会发现,我这点技术,人家58一眼就能识破)

加了异常处理机机制的目的是,防止标签中没有信息时,而出现报错。 异常处理机制使得遇到空白标签之后,循环仍然可以正常进行。

测试截图如下:http列表和title列表均显示正常!

所以这就说明我们的方法没有问题。

封装函数进行多网页爬取,代码如下:

C:\Users\13016>python  -mIPython
Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:54:40) [MSC v.1900 64 bit (AMD64)]
Type 'copyright', 'credits' or 'license' for more information
IPython 6.3.1 -- An enhanced Interactive Python. Type '?' for help.

In [1]: import  requests

In [2]: import  pandas  as  pd

In [3]: from  bs4  import  BeautifulSoup

In [4]: from  pandas  import  DataFrame

In [5]: import  numpy  as  np

In [6]: def  get_url(url):
   ...:     r=requests.get(url)
   ...:     r.encoding=r.apparent_encoding
   ...:     return  r.text

In [7]: def  get_data(html,http_list,title_list,site_list,area_list,price_list):
   ...:     soup=BeautifulSoup(html,'lxml')
   ...:     theme=soup.find('ul',attrs={"class":"house-list-wrap"})
   ...:     Tags=theme.find_all('li')
   ...:     for  li  in  Tags:
   ...:         try:
   ...:             li
   ...:             try:
   ...:                 http_list.append(li.find('a')["href"])
   ...:                 title_list.append(li.find('h2',attrs={"class":"title"}).text.strip())
   ...:                 site_list.append(li.find('span').text.strip())
   ...:                 area_list.append(li.find('p',attrs={"class":"baseinfo"}).text.strip())
   ...:                 price_list.append(li.find('div',attrs={"class":"price"}).text.strip())
   ...:             except:
   ...:                 continue
   ...:         except:
   ...:             continue
   ...:

In [8]: #设置休眠时间,防止网站反爬

In [9]: import  time  as  sleep

In [10]: http_list=[]

In [11]: title_list=[]

In [12]: site_list=[]

In [14]: area_list=[]

In [15]: price_list=[]
In [16]: for  i  in  range(1,11):
    ...:     url='http://wh.58.com/ershoufang/pn'+str(i)+'/'

In [17]: for  i  in  range(1,11):
    ...:     url='http://wh.58.com/ershoufang/pn'+str(i)+'/'
    ...:     html=get_url(url)
    ...:     grt_data(html,http_list,title_list,site_list,area_list,price_list)
    ...:     print('正在爬取第i页'%i)
    ...:     sleep(3)

sleep的作用时休眠循环,防止被服务器发现,是“非人类”在进行操作。

大功告成, 本来以为只用等电脑给我爬取数据的:可以刚刚爬取了一页信息,就出现了这个情况

我的爬虫,还是经过我处理的爬虫,还是被58给发现了。。。 好吧,我承认,58也是个大公司。

最后看了一下,爬取的数据:

1秒钟,240条数据,难怪被封。(只能是自我安慰了,因为验证码模拟登陆我还不会)

全文结束,欢迎在评论区讨论~

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 怎么使用 Git 和 Github 向开源项目提交 Pull Request

    渣渣橘又跟我提了一下毒鸡汤,看了一下之前学的 python 脚本还能用,然后在 Github 上看到了一个爬虫集合的项目,收集各种爬虫

    沈唁
  • python基础类型(二):字典与元组

    python中的字典是由键值对组成,每一个键在字典中都是唯一的,值可以是任意类型的对象,但是键必须是不可遍的对象类型(如:字符串、数字、元组等)。

    渔父歌
  • Python | 5分钟教你学会Django系统错误监控

    如何实现系统监控,自动发送错误日志的邮件呢?只需配置配置settings文件即可。

    用户1634449
  • 浅谈编程(肺腑之言)

    这些年,互联网爆炸式的发展,促生了无数程序员。 也促生了青鸟,达内,黑马,极客学院等大量 IT培训机构。 短短数年间,科班出生的程序员和培训机构出生的程序员呈指...

    杨校
  • 人生苦短我用Python?No!学习Python的真正理由其实是

    作者:gashero 链接:https://www.zhihu.com/question/282875062/answer/441546530

    老钱
  • 关于JAVA你必须知道的那些事(三):继承和访问修饰符

    今天乘着还有一些时间,把上次拖欠的面向对象编程三大特性中遗留的继承和多态给简单说明一下。这一部分还是非常重要的,需要仔细思考。

    啃饼小白
  • 我曾经在课间给学生讲过的金庸小说片段

    如果没记错的话,我应该是上大学之后在假期才偶尔有时间在山师东路一个店里租几本小说,碰巧租的第一本就是金庸的小说。没有血腥,没有暴力,没有色情,人物形象那么饱满,...

    Python小屋屋主
  • 3行代码让Python数据处理脚本获得4倍提速

    Python是一门非常适合处理数据和自动化完成重复性工作的编程语言,我们在用数据训练机器学习模型之前,通常都需要对数据进行预处理,而Python就非常适合完成这...

    一墨编程学习
  • Django小技巧16: 数据库访问优化

    本篇分享数据库访问优化相关, 读完这些并不是让你立即去优化代码, 更多的时候对于现有代码的优化, 需要借助Django Debug Toolbar来分析后, 再...

    用户1416054
  • Django小技巧19: 保护敏感信息

    互联网是一片荒地, 在互联网上部署 Web 服务的时候, 安全是首要考虑的。Django 在提供可靠和安全的API方面做的非常出色.但是前提是你要正确的使用它们...

    用户1416054

扫码关注云+社区

领取腾讯云代金券