zoukankan      html  css  js  c++  java
  • python3.x爬取美团信息

       在之前的文章中,笔者有提到,我们要在实践中去学习python,笔者有天就想着要不要爬点东西呢,跃跃欲试的节奏啊,想来想去,想到美团了,那么首先笔 者想给自己确定一个目标,就是我要爬什么样的数据,我要爬美团的哪些东西。笔者首先确定了笔者想要爬去的界 面,http://bj.meituan.com/。就是美团网在北京的团购首页,获取首页的团购,团购项目的介绍,团购售价,销量。
       1.首先确定要用的模块,<1.>urrlib,os,re三个模块,
       2.要想获得数据,并且一一对应起来,那么用到循环的嵌套(一开始卡壳,后来咨询得到启发),
       3.获取网页的所有数据,爬去下来
       4.分析这些想要或许的模块怎么找出来,
       5.找出相对于的正则来匹配,
       6.获取数据,并且找到对应的数值
       7.利用循环,并且配合字典的使用,将数据完整的获取下来,
       8.保存到相应的文档中
       9.关闭文档,
       10.提示数据保存成功,结束爬去。
       由于这是第一次采取这么多的信息,之前只是爬个图片啥的,所以笔者还是十分小心的去审查每一个元素,在这里推荐利用火狐浏览器,感觉是真的好用使用Firebug插件审查元素。


    查看元素后,可以获得这个网站的编码形式是utf-8,这对于我们爬取数据也是关键的。
       在一开始呢,笔者还打开了一款软件,fiddler,抓包




    这些信息还是很多的,由于笔者截图的时候碰到了网络的原因,但是笔者还是找到了自己想要的信息,这样可以在自己的代码中加入伪装浏览器的信息,那么接下来要做的事情就是定位我们想要找的数据。


       分析首页的团购信息,我们可以根据多个来确认这个信息的唯一标识符,<span>标签中并且有class="xtitle"< /span>中间文字,那么我们的正则表达式就出来了,r'<span class="xtitle">(.+?)</span>'(正则太难,笔者一个个试出来的)


    描述也是<span>标签并且 class="short-title",</span>的文字,那么很快就匹配到了,正则出来了,r'class="short-title">(.+)</span>'
    后面的就是依次类推。完成这个,那么我们就开始写我们的爬虫程序,导入我们想要用的模块,定义我们想要用的变量。爬去,匹配,然后循环得出来我们的结果,写入文档。代码如下


    #作者:雷子
    #qq:952943386
    #邮箱:leileili126@163.com
    #欢迎大家来点评,有问题可以进行沟通

    import  urllib.request
    import os
    import re
    file=open(r'meituancde.txt','w')
    url="http://bj.meituan.com/"
    headers={"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:47.0) Gecko/20100101 Firefox/47.0"}
    req=urllib.request.Request(url,headers=headers)
    response = urllib.request.urlopen(req)
    html = response.read().decode("utf-8")
    title_reg=r'<span class="xtitle">(.+?)</span>'   #匹配团购
    jianjie_reg=r'class="short-title">(.+)</span>'  #匹配团购简介
    sellnum_reg=r'<strong class="num">(.+)</strong>'  #销售的数量
    pire_reg=r'<strong>(.+)</strong>'   #团购的售价
    title_list = re.findall(title_reg,html)
    jianjie_list=re.findall(jianjie_reg,html)
    sellnum_list=re.findall(sellnum_reg,html)
    pire_list=re.findall(pire_reg,html)
    meitu={}
    i = 0
    for title in title_list:
        meitu['团购'] =title_list[i]
        for jianjie in jianjie_list:
            meitu['简介']=jianjie_list[i]
            for sellum in sellnum_list:
                meitu['销量']=sellnum_list[i]
                for pire in pire_list:
                    meitu['美团售价']=pire_list[i]
        i+=1
        print(meitu)
        if len(meitu) !=0:
            file.write(str(meitu))
            file.write(" ")
            file.close
    print("写入正确")
    代码 百度云

  • 相关阅读:
    Spreadsheet 使用介绍
    一套完整自定义工作流的实现(2)
    《WF编程》系列之 承载工作流:持久性服务 Persistence Services
    SQL Server 2005函数
    ActiveReport
    SQLServer 2000中,存储过程和用户自定义函数具体的区别??
    MS SQL Server 2005 物理查询处理中的各个阶段(二)
    《WF编程》系列 承载工作流:持久化与跟踪
    C# WinForm自定义控件整理
    SQL Server2005使用CTE实现递归
  • 原文地址:https://www.cnblogs.com/leiziv5/p/5697655.html
Copyright © 2011-2022 走看看