div生成图片_爬虫篇|动态爬取QQ说说并生成词云,分析朋友状况

最近整理一个爬虫系列方面的文章,不管大家的基础如何,我从头开始整一个爬虫系列方面的文章,让大家循序渐进的学习爬虫,小白也没有学习障碍.

爬虫篇 | 200 行代码实现一个滑动验证码

爬虫篇 | 学习Selenium并使用Selenium模拟登录知乎

爬虫篇 | Python使用正则来爬取豆瓣图书数据

爬虫篇 | 不会这几个库,都不敢说我会Python爬虫

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

爬虫篇 | Python最重要与重用的库Request

爬虫篇 | Python爬虫学前普及

基础篇 | Python基础部分

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

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

53f6af7e581453c6502e38d7b77bec0d.png

爬取动态内容

  1. 因为动态页面的内容是动态加载出来的,所以我们需要不断下滑,加载页面

  2. 切换到当前内容的frame中,也有可能不是frame,这里需要查看具体情况

  3. 获取页面源数据,然后放入xpath中,然后读取

  # 下拉滚动条,使浏览器加载出动态加载的内容,
       # 我这里是从1开始到6结束 分5 次加载完每页数据
       for i in range(1,6):
           height = 20000*i#每次滑动20000像素
           strWord = "window.scrollBy(0,"+str(height)+")"
           driver.execute_script(strWord)
           time.sleep(4)

       # 很多时候网页由多个或
       # 所以这里需要选中一下说说所在的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-8

import time
from selenium import webdriver
from lxml import etree

#这里一定要设置编码格式,防止后面写入文件时报错
import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )

friend = 'XXX' # 朋友的QQ号,朋友的空间要求允许你能访问
user = 'XXX'  # 你的QQ号
pw = 'XXXX'  # 你的QQ密码

#获取浏览器驱动
driver = webdriver.Firefox()

# 浏览器窗口最大化
driver.maximize_window()

# 浏览器地址定向为qq登陆页面
driver.get("http://i.qq.com")

# 所以这里需要选中一下frame,否则找不到下面需要的网页元素
driver.switch_to.frame("login_frame")

# 自动点击账号登陆方式
driver.find_element_by_id("switcher_plogin").click()

# 账号输入框输入已知qq账号
driver.find_element_by_id("u").send_keys(user)

# 密码框输入已知密码
driver.find_element_by_id("p").send_keys(pw)

# 自动点击登陆按钮
driver.find_element_by_id("login_button").click()

# 让webdriver操纵当前页
driver.switch_to.default_content()

# 跳到说说的url, friend你可以任意改成你想访问的空间
driver.get("http://user.qzone.qq.com/" + friend + "/311")

next_num = 0  # 初始“下一页”的id
while True:

       # 下拉滚动条,使浏览器加载出动态加载的内容,
       # 我这里是从1开始到6结束 分5 次加载完每页数据
       for i in range(1,6):
           height = 20000*i#每次滑动20000像素
           strWord = "window.scrollBy(0,"+str(height)+")"
           driver.execute_script(strWord)
           time.sleep(4)

       # 很多时候网页由多个或
       # 所以这里需要选中一下说说所在的frame,否则找不到下面需要的网页元素
       driver.switch_to.frame("app_canvas_frame")
       selector = etree.HTML(driver.page_source)
       divs = selector.xpath('//*[@id="msgList"]/li/div[3]')

       #这里使用 a 表示内容可以连续不清空写入
       with open('qq_word.txt','a') as f:
           for div in divs:
               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[0] if len(qq_name)>0 else ''
               qq_content = qq_content[0] if len(qq_content)>0 else ''
               qq_time = qq_time[0] if len(qq_time)>0 else ''
               print qq_name,qq_time,qq_content
               f.write(qq_content+"\n")

       # 当已经到了尾页,“下一页”这个按钮就没有id了,可以结束了
       if driver.page_source.find('pager_next_' + str(next_num)) == -1:
        break

       # 找到“下一页”的按钮,因为下一页的按钮是动态变化的,这里需要动态记录一下
       driver.find_element_by_id('pager_next_' + str(next_num)).click()

       # “下一页”的id
       next_num += 1

       # 因为在下一个循环里首先还要把页面下拉,所以要跳到外层的frame上
       driver.switch_to.parent_frame()

这样所有的说说内容就可以爬取到了。并且存到了同级目录中

生成词云

生成词云需要用到的库:

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

#coding:utf-8

"""
使用结巴分词生成云图
说明这里
1.生成词云一定要设置字体样式,否则汉字出现乱码或者不显示
2.我不知道为什么本机一直显示不了中文,后面我加了jieba分词词库就可以显示中文了
"""

from wordcloud import WordCloud
import matplotlib.pyplot as plt
import jieba

#生成词云
def create_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=2000,
        # 这种字体都在电脑字体中,一般路径
      font_path='C:\Windows\Fonts\simfang.ttf',
      height= 1200,
      width= 1600,
       # 设置字体最大值
      max_font_size=100,
    # 设置有多少种随机生成状态,即有多少种配色方案
      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')

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

如果你觉得文章还不错,请大家点赞分享下。你的肯定是我最大的鼓励和支持。

【完】如果觉得有料,来个在看,让朋友知道你越来越优秀了

说句题外话,有不少人想加我微信,看我朋友圈的每日分享,我姑且放出来,但名额有限,先来先得。我的朋友圈不止有技术分享,更有我的日常感悟,还有我个人商业思维观点 速速扫码添加!

ed64b75d6f8b6a115cb5c057c11a8453.png扫码添加,备注:公号铁粉

推荐阅读

爬虫篇 | Python使用正则来爬取豆瓣图书数据

Python爬虫:把爬取到的数据插入到execl中爬虫篇 | 学习Selenium并使用Selenium模拟登录知乎爬虫篇 | 200 行代码实现一个滑动验证码

爬虫篇 | 不会这几个库,都不敢说我会Python爬虫爬虫篇 | Python现学现用xpath爬取豆瓣音乐爬虫篇 | Python最重要与重用的库Request爬虫篇 | Python爬虫学前普及基础篇 | Python基础部分讲真,做Python一定不要只会一个方向!

5a4c61704aa8113a2d34b02fbedfba52.png

b53358b1bdcbbc39fb3880af82fcbaa7.png 喜欢就在看吧
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面我来介绍一下如何使用 Python 的 XPath 爬取评书网的数据。 首先,我们需要安装 requests 和 lxml 库。可以使用以下命令进安装: ``` pip install requests lxml ``` 接下来,我们需要使用 requests 库发送请求并获取评书网的 HTML 页面。我们可以使用以下代码: ```python import requests url = 'http://www.pingshu8.com/' response = requests.get(url) if response.status_code == 200: html = response.text print(html) else: print('请求失败') ``` 接下来,我们需要使用 lxml 库来解析 HTML 页面。我们可以使用以下代码: ```python from lxml import etree html = '<html><body><div><h1>hello world</h1></div></body></html>' selector = etree.HTML(html) result = selector.xpath('//h1/text()') print(result) ``` 上面的代码中,我们首先使用 etree.HTML() 函数将 HTML 页面转换为 Element 对象,然后使用 xpath() 方法获取我们想要的数据。 接下来,我们需要找到评书网页面中我们需要爬取的数据的 XPath 路径。你可以使用 Chrome 浏览器的开发者工具来查找 XPath 路径。具体步骤是: 1. 打开评书网页面 2. 右键点击需要爬取的数据区域 3. 选择“检查”,打开开发者工具 4. 在开发者工具中找到相应的 HTML 元素 5. 右键点击该元素,选择“Copy XPath”即可复制该元素的 XPath 路径 例如,我们想要爬取评书网首页的所有分类名称和链接,我们可以使用以下代码: ```python import requests from lxml import etree url = 'http://www.pingshu8.com/' response = requests.get(url) if response.status_code == 200: html = response.text selector = etree.HTML(html) # 获取所有分类名称和链接 categories = selector.xpath('//div[@id="nav"]/ul/li/a/text()') links = selector.xpath('//div[@id="nav"]/ul/li/a/@href') for i in range(len(categories)): print(categories[i], links[i]) else: print('请求失败') ``` 上面的代码中,我们使用了 XPath 路径 `//div[@id="nav"]/ul/li/a/text()` 和 `//div[@id="nav"]/ul/li/a/@href` 来获取所有分类名称和链接。 希望这个示例能够帮助你学习如何使用 XPath 爬取评书网的数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值