本篇文章重要报告了用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视频教程
以上就是scrapy完成新浪微博爬虫的细致内容,更多请关注ki4网别的相干文章!