数据结构论坛

注册

 

发新话题 回复该主题

Python爬虫动态爬取QQ说说并生成词 [复制链接]

1#

今天我们要做的事情是使用动态爬虫来爬取QQ空间的说说,并把这些内容存在txt中,然后读取出来生成云图,这样可以清晰的看出朋友的状况。

这是好友的QQ空间10年说说内容,基本有一个大致的印象了。

爬取动态内容

因为动态页面的内容是动态加载出来的,所以我们需要不断下滑,加载页面切换到当前内容的frame中,也有可能不是frame,这里需要查看具体情况获取页面源数据,然后放入xpath中,然后读取#下拉滚动条,使浏览器加载出动态加载的内容,#我这里是从1开始到6结束分5次加载完每页数据foriinrange(1,6):height=*i#每次滑动像素strWord=window.scrollBy(0,+str(height)+)driver.execute_script(strWord)time.sleep(4)#很多时候网页由多个frame或iframe组成,webdriver默认定位的是最外层的frame,#所以这里需要选中一下说说所在的frame,否则找不到下面需要的网页元素driver.switch_to.frame(app_canvas_frame)selector=etree.HTML(driver.page_source)divs=selector.xpath(//*[

id=msgList]/li/div[3])所有的注释都在代码中,所以也就不作详情说明,

昨天的模拟登录大家都应该掌握了,没有掌握的自己再去复习一下

.Python爬虫:学习Selenium并使用Selenium模拟登录知乎

爬取说说的完整代码

#coding:utf-8importtimefromseleniumimportwebdriverfromlxmlimportetree#这里一定要设置编码格式,防止后面写入文件时报错importsysreload(sys)sys.setdefaultencoding(utf-8)friend=XXX#朋友的*i#每次滑动像素strWord=window.scrollBy(0,+str(height)+)driver.execute_script(strWord)time.sleep(4)#很多时候网页由多个frame或iframe组成,webdriver默认定位的是最外层的frame,#所以这里需要选中一下说说所在的frame,否则找不到下面需要的网页元素driver.switch_to.frame(app_canvas_frame)selector=etree.HTML(driver.page_source)divs=selector.xpath(//*[

id=msgList]/li/div[3])#这里使用a表示内容可以连续不清空写入withopen(qq_word.txt,a)asfordivindivs:qq_name=div.xpath(./div[2]/a/text())qq_content=div.xpath(./div[2]/pre/text())qq_time=div.xpath(./div[4]/div[1]/span/a/text())qq_name=qq_name[]iflen(qq_name)elseqq_content=qq_content[]iflen(qq_content)elseqq_time=qq_time[]iflen(qq_time)elseprintqq_name,qq_time,qq_contentf.write(qq_content+\n)#当已经到了尾页,“下一页”这个按钮就没有id了,可以结束了ifdriver.page_source.find(pager_next_+str(next_num))==-1:break#找到“下一页”的按钮,因为下一页的按钮是动态变化的,这里需要动态记录一下driver.find_element_by_id(pager_next_+str(next_num)).click()#“下一页”的idnext_num+=1#因为在下一个循环里首先还要把页面下拉,所以要跳到外层的frame上driver.switch_to.parent_frame()这样所有的说说内容就可以爬取到了。并且存到了同级目录中

生成词云

生成词云需要用到的库:

wordcloud,生成词云matplotlib,生成词云图片jieba,这个库可用可不用,但我因为中文一直显示不出来,后来加上了这个库,就能显示中文了。

#coding:utf-8使用结巴分词生成云图说明这里1.生成词云一定要设置字体样式,否则汉字出现乱码或者不显示2.我不知道为什么本机一直显示不了中文,后面我加了jieba分词词库就可以显示中文了fromwordcloudimportWordCloudimportmatplotlib.pyplotaspltimportjieba#生成词云defcreate_word_cloud(filename):text=open({}.txt.format(filename)).read()#结巴分词wordlist=jieba.cut(text,cut_all=True)wl=.join(wordlist)#设置词云wc=WordCloud(#设置背景颜色background_color=white,#设置最大显示的词云数max_words=,#这种字体都在电脑字体中,一般路径font_path=C:\Windows\Fonts\simfang.ttf,height=,width=,#设置字体最大值max_font_size=,#设置有多少种随机生成状态,即有多少种配色方案random_state=30,)myword=wc.generate(wl)#生成词云#展示词云图plt.imshow(myword)plt.axis(off)plt.show()wc.to_file(py_book.png)#把词云保存下if__name__==__main__:create_word_cloud(word_py)

另外:回复关键词:京东图书评价,获取京东图书评论内容,看看一本图书是否值得购买。

推荐阅读:

Python爬虫:把爬取到的数据插入到execl中

Python爬虫:现学现用xpath爬取豆瓣音乐

Python爬虫系列:用邮件来通知爬虫异常状况

Python爬虫学前普及

您的Python之旅

分享 转发
TOP
发新话题 回复该主题