PHP爬虫微博某个话题的所有内容,GitHub - wansho/sina_weibo_crawl: 爬取新浪微博某一话题的数据,可以替代微博搜索接口...

[TOC]

Introduction

最近需要新浪微博的数据做研究,苦于找不到满意的数据,新浪微博的API对数据的获取有限制,也找不到合适的爬虫代码,遂自己实现了一个爬取新浪微博的爬虫。

爬取的数据是 新浪微博搜索某一个话题,得到的微博数据,下面是爬取到的有关苹果手机的微博示例:

687474703a2f2f6f78316c6c737869622e626b742e636c6f7564646e2e636f6d2f25453625393525423025453625384425414544656d6f2e4a50472d6f726967696e

之前也爬取过 豆瓣电影短评,但是好久没有再练手了,发现遗忘了很多知识点,加上新浪微博对爬虫的嗅觉异常灵敏,导致中间遇到了非常多的坑,不过好在大多数的问题,都已经解决了。所以今天索性总结一下,如果以后再写爬虫,可以拿来参考。

另外,我不是写爬虫的专家,对python的语法也不是很熟悉,也没有用scrapy这种爬虫工具(感觉用不到,因为爬虫的思想还是很简单的),所以写出来的爬虫应该比不上专业的水准,最后我会共享该程序的源码。

本文涉及的主要知识点有如下几个,其顺序大概是我写爬虫的步骤:

选择合适的爬取源

分析生成要爬取网站的url

根据url下载目标网页(利用cookie模拟登陆)

用Beautifulsoap和正则表达式(re)解析网页中需要的内容

将数据存储到csv文件中

另外,这五个主要步骤中遇到了很多坑,特别是第一个步骤和第三个步骤,我会在这些步骤中都提到。

Programming

选择合适的爬取源

由于之前爬取豆瓣电影评论的时候,我直接爬取了PC浏览器端的网页,而且在利用cookie进行模拟登陆后爬取的非常顺利,所以我觉得微博也应该这么爬取,所以我注册了一个微博的账号,通过浏览器端拿到了cookie,觉得万事大吉了。根本没有考虑到新浪微博和豆瓣的差异。

结果,利用cookie确实可以顺利爬到相关网页的数据,但是,当我看到服务器返回的HTML代码,我惊呆了,汉字全是unicode码,于是我查找了python3 如何 进行转码[文献1],了解到python3的转码函数:

# python 的str类型,通过encode() 可以转码为指定的bytes类型

encode()

# python 的bytes类型,通过decode() 可以转换成为指定的str类型

decode()

通过使用 html = urlopen(req).read()方法,我们能够获取到请求的网页数据,但是返回的是bytes类型,所以我们需要 html = urlopen(req).read().decode('utf-8')转成str类型。

但是即使如此,返回的HTML字符串,里面的汉字仍然是Unicode编码(\u开头,加上四个16进制的字符):

687474703a2f2f6f78316c6c737869622e626b742e636c6f7564646e2e636f6d2f756e69636f64652545372542432539362545372541302538312545342542382542452545342542452538422e4a50472d6f726967696e

所以我们还要继续编解码,将里面的unicode字符转成中文,具体代码如下:

encode("utf-8").decode('unicode_escape')

如此得到的网页源码,中文才会正常显示。

但是问题又来了,微博返回的HTML源码太复杂了,我仔细分析后,才发现微博源码是HTML下又嵌套了一个HTML。

如图,我要爬取的内容就在嵌套的那个HTML下,而且里面的特殊字符都是用转义字符进行了转义,这样的网页在即使下载下来了,也要花大量的精力写规则进行解析。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值