最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

scrapy实现新浪微博爬虫

来源:懂视网 责编:小采 时间:2020-11-27 14:11:05
文档

scrapy实现新浪微博爬虫

scrapy实现新浪微博爬虫: 本篇文章主要讲述了用scrapy实现新浪微博爬虫,具有一定的参考价值,感兴趣的朋友可以了解一下 ,看完不妨自己去试试哦!最近因为做毕设的原因,需要采集一批数据。本着自己动手的原则,从新浪微博上采集到近百位大家耳熟能详的明星14-18年的微博内容。看看
推荐度:
导读scrapy实现新浪微博爬虫: 本篇文章主要讲述了用scrapy实现新浪微博爬虫,具有一定的参考价值,感兴趣的朋友可以了解一下 ,看完不妨自己去试试哦!最近因为做毕设的原因,需要采集一批数据。本着自己动手的原则,从新浪微博上采集到近百位大家耳熟能详的明星14-18年的微博内容。看看

本篇文章主要讲述了用scrapy实现新浪微博爬虫,具有一定的参考价值,感兴趣的朋友可以了解一下 ,看完不妨自己去试试哦!

最近因为做毕设的原因,需要采集一批数据。本着自己动手的原则,从新浪微博上采集到近百位大家耳熟能详的明星14-18年的微博内容。看看大佬们平常都在微博上都有哪些动态吧~
1.首先项目采用scrapy编写,省时省力谁用谁知道。
采集的网站为weibo.com,是微博的网页端。稍稍麻烦了一点,但相对于移动段和wap站点来说内容稍微更全一点。
2.采集之前我们先来看下微博都给我们设置了哪些障碍。

  • 登录
  • 页面js渲染
  • 由于微博对于没登录的用户默认都是302跳转到登录界面,所以采集微博钱必须得让微博认为,本次采集偷了个懒,直接是先手动登录然后保存cookie到scrapy上,请求的时候带上cookie去访问,因为采集量并不是很大,估计也就10w条左右。这里需要对刚入scrapy的小伙伴需要提醒一下,scrapy的cookie是类似与json的形式,不像平常在requests上直接粘贴就可以用,需要转换一下格式。
    在这里插入图片描述
    大概就是像这样,所以需要把登录后的cookie粘贴出来用代码转换一下,代码如下:

    class transCookie:
     def __init__(self, cookie):
     self.cookie = cookie
    
     def stringToDict(self):
     itemDict = {}
     items = self.cookie.split(';')
     for item in items:
     key = item.split('=')[0].replace(' ', '')
     value = item.split('=')[1]
     itemDict[key] = value
     return itemDict
    
    
    if __name__ == "__main__":
     cookie = "你的cookie"
     trans = transCookie(cookie)
     print(trans.stringToDict())

    应该来说一个cookie差不多够用,我这我保存的是三个cookie,多个cookie简单的办法是把多个cookie直接放在一个数组里面,每次请求的时候用random函数随机挑一个出来,当然这只是针对采一批数据就撤的情况,大规模必须维护一个账号池。请求的时候带上ua,和cookie。如下:
    在这里插入图片描述
    微博是以oid区分每个用户的,我们以吴彦祖微博为例,在微博搜索界面搜索吴彦祖,进入主页右键查看网页源代码我们可以看到:
    在这里插入图片描述
    此处的oid即是每个用户的唯一标识。对应用户的主页地址即为https://weibo.com + oid,
    有了地址,我们直接进入微博界面进行采集即可,拼凑出url地址,例如:
    https://weibo.com/wuyanzu?is_all=1&stat_date=201712#feedtop
    这是吴彦祖2017年12月份的微博,我们不难发现,只需改变stat_date后面的数字即为对应微博地址。对于某些微博量比较多的用户,月份的微博可能还涉及到js再加载一次,当然,我们高冷的男神吴彦祖先生肯定是不会发那么多的,我们再找一个微博量比较大的自媒体,例如:
    在这里插入图片描述
    可以看到,余下的微博是需要通过js异步加载来呈现给用户的。打开浏览器开发者模式,
    在这里插入图片描述
    在这里插入图片描述

    对比两次js加载的页面,我们不难发现,Request_URL差别的地方仅仅是在pagebar和_rnd两个参数上,第一个代表页数,第二个是时间的加密(测试不带上也无妨),因此我们仅仅需要构建页数即可。有些微博量巨多的可能还需要翻页,道理相同。

    class SpiderItem(scrapy.Item):
     # define the fields for your item here like:
     # name = scrapy.Field()
     nickname = scrapy.Field()
     follow = scrapy.Field()
     fan = scrapy.Field()
     weibo_count = scrapy.Field()
     authentication = scrapy.Field()
     address = scrapy.Field()
     graduated = scrapy.Field()
     date = scrapy.Field()
     content = scrapy.Field()
     oid = scrapy.Field()

    设置需要爬取的字段nickname昵称,follow关注,fan粉丝,weibo_count微博数量,authentication认证信息,address地址,graduated毕业院校,有些微博不显示的默认设置为空,以及oid和博文内容及发布时间。
    这里说一下内容的解析,还是吴彦祖微博,如果我们还是像之前一样直接用scrapy的解析规则去用xpath或者css选择器解析会发现明明结构找的正确却匹配不出数据,这就是微博坑的地方,点开源代码。我们发现:
    在这里插入图片描述
    微博的主题内容全是用script包裹起来的!!!这个问题当初也是困扰了博主很久,反复换着法子用css和xpath解析始终不出数据。
    解决办法:正则匹配(无奈但有效)
    至此,就可以愉快的进行采集了,附上运行截图:
    在这里插入图片描述
    输入导入mongodb:
    在这里插入图片描述

    相关教程:Python视频教程

    声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文档

    scrapy实现新浪微博爬虫

    scrapy实现新浪微博爬虫: 本篇文章主要讲述了用scrapy实现新浪微博爬虫,具有一定的参考价值,感兴趣的朋友可以了解一下 ,看完不妨自己去试试哦!最近因为做毕设的原因,需要采集一批数据。本着自己动手的原则,从新浪微博上采集到近百位大家耳熟能详的明星14-18年的微博内容。看看
    推荐度:
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top