本文转载自微信公众号《智斌的Python笔记》,作者智斌。转载本文请联系志斌python笔记公众号。大家好,我是志斌~前几天学校的一位老师在做微博舆情分析,让我帮她做一个用关键词爬取微博的爬虫。另外,最近有不少读者向志斌询问关于微博爬虫的问题。问题,志斌今天就来给大家分享一下。01分析页面这次我们选择了从移动端抓取微博。移动端的反爬是信息验证反爬虫的cookie反爬,所以我们首先需要登录获取cookie。登录后,我们可以获取自己的cookies。不懂的朋友可以看这篇文章了解cookies,解决登录爬取的烦恼!。那么我们来观察一下用户是如何搜索微博内容的。通常我们在这个地方输入关键词来搜索微博。通过在开发者模式下观察这个页面,我发现它每次请求关键字时,都会返回一个XHR响应。现在我们已经找到了数据真正存在的页面,我们就可以进行爬虫的正常操作了。02数据采集在上面我们已经找到了真正存放数据的网页,现在我们只需要向网页发起请求,然后提取数据即可。01发起请求通过观察请求头,我们不难构造出请求代码。代码如下:key=input("请输入爬取关键字:")forpageinrange(1,10):params=(('containerid',f'100103type=1&q={key}'),('page_type','searchall'),('page',str(page)),)response=requests.get('https://m.weibo.cn/api/container/getIndex',headers=headers,params=params)02提取从上面的数据中,我们发现这个数据可以转化为字典进行爬取,但是经过我的实际测试,我发现使用正则表达式进行提取是最简单方便的,所以这里介绍一下提取正则表达式。有兴趣的读者可以尝试使用字典的方法来提取数据。代码如下:r=response.texttitle=re.findall('"page_title":"(.*?)"',r)comments_count=re.findall('"comments_count":(.*?),',r)attitudes_count=re.findall('"attitudes_count":(.*?),',r)foriinrange(len(title)):print(eval(f"'{title[i]}'"),comments_count[i],attitudes_count[i])这里有个小问题。微博标题采用Unicode编码。如果直接爬取存储,会以Unicode存储。在此感谢大哥-小明的帮助。志斌在网上找了很多解决办法都没有成功。最后小明哥用一个简单的函数解决了。我真的很佩服!解决方法:使用eval()输出标题,然后就可以将Unicode转成汉字了。03小结1、本文详细介绍了如何使用Python指定关键词爬取微博。有兴趣的读者可以自己尝试实践一下。2.本文仅供读者学习使用,不得用于其他用途!3、点击下方【正在寻找】,您可以找到志斌获取本文所有代码。
