python爬取微博热搜榜

python爬取微博热搜榜

最近应我大学室友得需求,做了一个简单的爬虫案例,先给大家看一下程序运行效果
在这里插入图片描述
2019-06-04 14:48分热搜榜前10
接下来就是贴出代码了,在这里我会做一些简单说明,对如刚入门的同学可能会有所帮助,这里使用的是python3

  1. 需要引入的包,这两个包可能需要自行下载

    urllib
    lxml
    
  2. 代码

    import urllib.request #导入urllib.request库
    import urllib.parse
    from lxml import etree
    
    #b = str(input("请输入:"))   #提示用户输入信息,并强制类型转换为字符串型
    
    def weibo() :
        url = 'https://s.weibo.com/top/summary?'
        a = urllib.request.urlopen(url)  #打开指定网址
        html = a.read()  #读取网页源码
        html = html.decode("utf-8")  #解码为unicode码
        # print(html)                #打印网页源码
    
        tree = etree.HTML(html)
        list = tree.xpath(u'//*[@id="pl_top_realtimehot"]/table/tbody/tr/td[@class="td-02"]')
    
        prefix = 'https://s.weibo.com'  # 微博域名
        weiboSummary = open("微博热搜.txt", 'w')  #打开并写入文件
        for index,item in enumerate(list):
            if index > 0:
                a_element = item.xpath('.//a')[0]
                title = a_element.text # 关键词
                href = urllib.parse.unquote(a_element.attrib.get('href')) # 链接
                href = href.replace("#", "%23") #此处是对链接中的#号做一个编码转换,否则无法跳转指定关键词链接
                hot = item.xpath('./span')[0].text #热度指数
                line = str(index) + "\t" + title + "\t" + hot + "\t" + prefix + href + "\n"
                print(line.replace("\n", ""))
                if href.find("javascript:void(0)") != -1:
                    line = str(index) + "\t" + title + "\t" + hot
                #写入文件
                weiboSummary.write(line)
            else:
                title = '排名\t关键词\t热度\t链接\n'
                print(title.replace("\n",""))
                weiboSummary.write(title)
    
        weiboSummary.close()
        
    #调用方法
    weibo();
    
  3. 遇到的问题

    1).这是本文中关于lxml的一些简单用法

    代码中的 etree.HTML(html)是获取页面源码对象

    获取到节点对象以后可以使用 xpath()来获取元素内容,此处可以使用下图中的方法,注意:该方法类似于JQuery的类选择器,如果按xpath('//a')这种写法,获取的是页面中所有的a标签。

    u代表的是编码方式

    element = tree.xpath(u'//*[@id="pl_top_realtimehot"]/table/tbody/tr/td[@class="td-02"]')

    element.text获取的是当前对象标签中的文本

    属性的话我们可以通过element.attrib.get('标签中的属性名')这种方式获取标签属性的内容

    详细的lxml文档操作可以自行百度
    在这里插入图片描述
    2). 关于IO

    我在使用python的IO操作时候遇到一些问题
    在这里插入图片描述
    具体的错误原因我还尚不明确,不过导致报错的原因是因为我导入了 IO 的包,python中本身带有IO操作的相关API
    我们只需要直接调用就可以
    例如:open('weibo.txt', 'w') 不需要使用 os.open('weibo.txt')使用完之后要记得关闭资源

此处感谢:https://blog.csdn.net/lyandgh/article/details/81013897

  • 5
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值