博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python爬虫实战(6)-爬取QQ空间好友说说并生成词云(超详细)
阅读量:6454 次
发布时间:2019-06-23

本文共 2850 字,大约阅读时间需要 9 分钟。

前言

先看效果图:

TXT文件:
如果想生成特定图片样式的词云图,可以直接访问下面这篇文章学一下: https://mp.weixin.qq.com/s/FUwQ4jZu6KMkjRvEG3UfGw 前几天我们陆陆续续的讲了Python如何生成词云以及Selenium的安装使用,今天我们综合一下这些知识,写一篇爬虫实战文章,带大家爬取QQ空间好友说说写人本地txt文件,并生成词云。 大家一定很感兴趣吧?下面开始正题。

思路

1.确认访问的URL 2.模拟登录你的QQ号 3.判断好友空间是否加了权限,切换到说说的frame,爬取当前页面数据,下拉滚动条,翻页继续获取 爬取的内容写入本地TXT文件中 4.爬取到最后一页,读取TXT文件从而生成词云

###具体分析 1.确认访问的URL 这就很简单了,我们通过观察发现,QQ空间好友的URL: https://user.qzone.qq.com/{好友QQ号}/311

2.我们在请求的时候会遇到模拟登录,也就是要通过Selenium+浏览器登录你的QQ号后才能访问你好友的QQ空间 下面是模拟登录的代码:

file = 'C:/Users/Administrator/Desktop/{}.txt'.format(qq)    driver = webdriver.Firefox()    driver.maximize_window() #窗口最大化    driver.get('https://user.qzone.qq.com/{}/311'.format(qq))  #URL    driver.implicitly_wait(10)  # 隐示等待,为了等待充分加载好网址    driver.find_element_by_id('login_div')    driver.switch_to_frame('login_frame') #切到输入账号密码的frame    driver.find_element_by_id('switcher_plogin').click()##点击‘账号密码登录’    driver.find_element_by_id('u').clear() ##清空账号栏    driver.find_element_by_id('u').send_keys('你的QQ账号')#输入账号    driver.find_element_by_id('p').clear()#清空密码栏    driver.find_element_by_id('p').send_keys('你的QQ密码')#输入密码    driver.find_element_by_id('login_button').click()#点击‘登录’    driver.switch_to_default_content()   #跳出当前的frame,这步很关键,不写会报错的,因为你登录后还要切刀另一个frame复制代码

需要强调是 **driver.switch_to_default_content() **,表示跳出当前的frame,这步很关键,因为你登录后还要切刀另一个frame。不写的话会出现下面的错误:

3.第三部分我分几个点来说: (1).判断空间是否加了权限

try:        driver.find_element_by_id('QM_OwnerInfo_Icon')#判断是否QQ空间加了权限        b = True    except:        b = False复制代码

(2)切换到说说的frame,这个大家都会找吧

(3)下拉滚动条 下拉滚动条是为了点击‘下一页’,下拉到可见视图。下拉滚动条要注意一点: 一定要对应它的frame,不要在爬取说说的frame下拉。

#分4此下拉,确保能下拉到底部   for j in range(1, 5):                    driver.execute_script("window.scrollBy(0,5000)")                    time.sleep(2)复制代码

(4).爬取说说数据,这就简单了吧?我用的xpath获取的说说的title,感兴趣的朋友可以把时间等数据一起获取

selector = etree.HTML(driver.page_source)                title = selector.xpath('//li/div/div/pre/text()')复制代码

(5).翻页 直接点击‘下一页’即可。

driver.find_element_by_link_text(u'下一页').click()复制代码

(6).txt数据写入,不用多说,爬取到title了直接写入

for i in title:                    if not os.path.exists(file):                        print('创建TXT成功')                    with open(file, 'a+') as f:                        f.write(i + '\n\n')                        f.close()复制代码

4.生成词云,这只是普通的模式,想具体了解可以看我以前文章或者Google

def get_wordcloud(file):    f = open(file, 'r', encoding='gbk').read()    # 结巴分词,生成字符串,wordcloud无法直接生成正确的中文词云    cut_text = " ".join(jieba.cut(f))    wordcloud = WordCloud(        # 设置字体,不然会出现口字乱码,文字的路径是电脑的字体一般路径,可以换成别的        font_path="C:/Windows/Fonts/simfang.ttf",        # 设置了背景,宽高        background_color="white", width=2000, height=1380).generate(cut_text)    plt.imshow(wordcloud, interpolation="bilinear")    plt.axis("off")    plt.show()复制代码

由于时间问题,此篇文章只支持输入一个好友的QQ号,你要是想爬取你的所有的QQ好友的说说,可以现在QQ邮箱获取你所有好友的QQ号,然后生成一个数组,依次获取就可以了。

源码获取方式

加我的微信,我发给你,一起交流,交个朋友!:

转载地址:http://dxfzo.baihongyu.com/

你可能感兴趣的文章
静态路由
查看>>
服务器tcp连接timewait过多优化及详细分析
查看>>
ngix内核优化
查看>>
Docker(二十一)k8s deployment 的yaml 文件
查看>>
VMware Workstation中安装Hyper-V
查看>>
二级路由器设置为何要关闭DHCP服务
查看>>
我的友情链接
查看>>
tomcat 性能优化
查看>>
Perl入门(六) Perl方法的使用
查看>>
citrix license server 服务无法启动
查看>>
批处理添加连续ip
查看>>
php5.5以上版本编译扩展模块方法
查看>>
xargs 命令
查看>>
我的友情链接
查看>>
CHTools-OC版本目录介绍
查看>>
Rsync详解
查看>>
在JavaScript中创建对象
查看>>
SpringCloud学习成长之路二 服务客户端(rest+ribbon)
查看>>
HTTP 与 Post
查看>>
[转载]真正的inotify+rsync实时同步 彻底告别同步慢
查看>>