准备工作

安装selenium, pyquery, json模块。
使用的是火狐浏览器,所以还要安装geckodriver, 下载好后,把geckodirver.exe文件放在python.exe同一文件夹下即可。
如果使用chrome浏览器,需要安装chromedriver,需要对应好版本号,否则运行不起来。把下载后的chromedriver.exe放在python的Scripts文件夹下即可。
本次爬取使用火狐浏览器。

爬取步骤

爬虫最重要的一步就是如何获取到网页源代码,对于现在各种各样的动态网页,有时候可以使用Ajax请求直接获取到数据,但是大多数时候Ajax请求中的参数繁多也难以确定规律,所以本次使用selenium来获取网页的源代码,所见即所爬。

1、获取网页源码

首先确定我们需要访问的网页网址。

中间的部分就是你想要爬取的QQ号。这里解释下后面的main为主页。将main换成了其他的一些数字,例如311,334等等,这些可以直接访问到说说,留言版等等,感兴趣的可以直接访问说说界面开始爬取信息,这里不做考虑,还是直接从主页开始一步步访问说说。
这里放一张图片,为什么是311可以直接访问到说说。(右键检查(查看元素)或者F12进入)

在进入空间主页后,我们接下来需要确定“说说”按钮,有两个说说按钮,获取其中一个就行。(详细代码后面再放)

btn_ss = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#QM_Profile_Mood_A span')))
btn_ss.click()

等待按钮可点击后,点击按钮,网页即跳转到说说界面。这里有个坑,如果这时候你直接获取网页源代码是获取不全的。

如果你没有从头分析网页结构,你肯定会忽略掉这个iframe标签,然后一直尝试获取网页源代码,但就是发现获取不到你想要的说说数据在哪。(卡了可能有一个小时,才想起来可能有iframe标签,o(╥﹏╥)o哭了)
如果不知道iframe标签的作用的话,这里简单介绍一下,如果你获取的网页中含有iframe或者frame标签,则你将获取不到这些标签里面的数据,必须使用switch_to.frame()方法切换frame,同样的在子frame中也是获取不到父frame中的数据。

browser.switch_to.frame('app_canvas_frame')

这里将browser切换frame,填入的参数为iframe的id即可成功切换。切换好数据后就可以成功的爬取数据了。
这里page可以先忽略,用来分页爬取时使用。

browser = webdriver.Firefox()
wait = WebDriverWait(browser, 10)def index_page(qq, page):#  进入主页try:url = 'https://user.qzone.qq.com/' + qqbrowser.get(url)btn_ss = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#QM_Profile_Mood_A span')))btn_ss.click()browser.switch_to.frame('app_canvas_frame')if page > 1:print('正在爬取', page, '页')input = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#pager .textinput')))submit = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#pager .bt_tx2')))input.clear()input.send_keys(page)submit.click()get_info()except TimeoutException:index_page(qq, page)

2、解析网页源码

在获取网页源码前,最好先等待几秒,不然可能在切换frame后,仍然获取不到其中的数据。

所有的说说都是在ol这个便签下,ol便签下的一个li标签对应一条说说,同时我们发现每个li标签都有feed属性。
所以第一步我们先获取到这些li标签,这里使用css选择器来获取到ol下所有的li标签。

items = doc('#msgList .feed').items()

如果对css选择器不熟悉的朋友,我这里再稍微解释一下,#号后面跟着的是id,.号后面跟着的是属性,如果像直接获取到标签就直接使用li, ol即可。,css选择器可以嵌套多个属性,标签等等。
获取到li标签后,我们再来解析li标签的结构。

第一个div是用户的头像,第二个div才是我们需要的说说主体,第三个div没啥用。

接下来就是定位说说的文字,图片,时间,转发评论数分别属于哪个部分,再通过css选择器选定标签,获取其中的信息。

def get_info():time.sleep(3)html = browser.page_source# print(html)doc = pq(html)items = doc('#msgList .feed').items()for item in items:pic = []images = item.find('.md img').items()for image in images:pic.append(image.attr('data-src'))ss = {'author': item.find('.bd .qz_311_author').text(),'content': item.find('.bd .content').text(),'image': pic,'time': item.find('.ft .info').text()}save_to_txt(ss)

3、写入文件

写入文件没什么好介绍的,这里使用json,直接写入的是txt,可以选择存放在数据库中,或者csv文件。

def save_to_txt(ss):with open('data.txt', 'a', encoding='gb18030') as file:file.write(json.dumps(ss, ensure_ascii=False) + '\n')

4、分页爬取

MAX_PAGE = 17if __name__ == '__main__':for page in range(1, MAX_PAGE + 1):index_page('qq号', page)

分页爬取时,需要先提前确定爬取的最大页数。

if page > 1:print('正在爬取', page, '页')input = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#pager .textinput')))submit = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#pager .bt_tx2')))input.clear()input.send_keys(page)submit.click()

回到之前的if语句,这里是获取的是一个文本框与按钮。

判断在爬取到第二页的时候,因为我们一直都是访问第一页的说说,所以在解析前,需要进行跳转网页。如果使用下一页跳转的话,那比如在第十页跳转出错时,就无法直接从第十一页开始继续获取数据。

再强调一次,一定要记得切换frame,否则将无法获取到这些文本框,按钮,导致无法进行跳转!!!

说在最后的话

第一点:不要忘记切换frame
第二点:不要频繁尝试爬取一个人,因为可能被检测到,导致出现下面的提示。

别问我怎么知道的,ヾ(⌐ ■_■)。虽然出现这个并不影响继续爬虫,但是还是很难过啊,一般过几个小时候,就会自动解了。
第三点:爬取的时候可能会报错,解决办法就是once again,重新运行。还有就是在你觉得可能错误的地方,sleep一下,等待网页响应,因为可能你需要的控件没有加载出来。(可是我都wait了,为什么有时候没有跳转到说说界面,直接运行switch语句,不要问我,我也不知道orz…)
第四点:当你运行程序,弹出网页的时候,需要你登录,这时候你可以选择手动登录或者python 模拟登录。但是,模拟登录多了,也就是几次之后,就会出现验证码,要模拟验证这又是另一回事了。所以这里推荐还是手动登录,稳妥。又一个但是,如果你想要无界面爬取,就是使用PhantomJS的话,就必须模拟登录,并且需要判断是否需要进行验证,两个字:麻烦。模拟登录的代码,我注释了在总代码中,想要试试的朋友,直接将注释去掉即可。
第五点:你或许想爬那些需要访问授权的好友空间,我这里郑重告诉你,或许别人的代码可行,但是我的代码是不可以的。(因为没去考虑啊,干)
第五点:(这人话好多啊(╯‵□′)╯︵┻━┻)代码在这,差点忘了。https://github.com/DRNTT/Spider/blob/master/练习/kongjian.py

python selenium爬取QQ空间说说相关推荐

  1. python爬取加密qq空间_使用python+selenium爬取qq空间好友动态

    使用python+selenium爬取qq空间好友动态 分析过程如下: 要想用selenium登陆qq空间,必须点击账号密码登陆按钮然后再填写账号密码登陆. 1.PNG 点击账号密码按钮后跳转到如下页 ...

  2. 如何用python爬虫爬取qq空间说说

    之前学了下爬虫一直就想爬一下QQ空间 在爬取之前需要做的准备工作 安装python3 需要的库: re 正则 selenium 需要安装 chrome 或者 Firefox 还有他们的模拟 Chrom ...

  3. python整合selenium爬取QQ空间访客记录

    利用周末放假两天时间写了个QQ空间访客记录的爬虫,在这里分享出来:本文将会把要做的步骤都列出来,一步一步的实现这个爬虫程序. 特别注明: 本程序仅供学习交流目的 请勿用于不可描述的事情 爬取过程中需要 ...

  4. selenium爬取QQ空间

    这几天在看<从零开始学python网络爬虫>中的模拟浏览器篇,对其中的爬取好友说说比较感兴趣,不过书中只是爬取每个好友第一页说说,因此我稍微改进了下(发书名是尊重作者,不过个人认为这本书讲 ...

  5. Python单线程爬取QQ空间说说存入MySQL并生成词云(超详细讲解,踩坑经历)

    利用python爬取好友说说并分析 看了网上的许多博客,基本上都是一个样,基本的知识也没详细解释,我这次也想跟大家仔细分析一下,自己还是要有一定爬虫基础,本人技术有限,如果本文哪有错误或不够准确的地方 ...

  6. python3 使用selenium爬取QQ空间说说信息

    使用PhantomJS,事先需要下载PhantomJS from selenium import webdriver import time#使用selenium driver = webdriver ...

  7. python爬虫爬取qq空间说说_用python爬取qq空间说说

    环境:PyCharm+Chorme+MongoDB Window10 爬虫爬取数据的过程,也类似于普通用户打开网页的过程.所以当我们想要打开浏览器去获取好友空间的时候必定会要求进行登录,接着再是查看说 ...

  8. selenium——爬取qq空间说说

    采用可见即可爬的方法 模拟登录 抓取说说内容 自己的个人说说网址: https://user.qzone.qq.com/你的qq号/311 一.打开登录界面 切换iframe 1.由于登录按钮是在if ...

  9. python + selenium +chrome爬取qq空间好友说说并存入mongodb数据库

    python + selenium +chrome爬取qq空间好友说说并存入mongodb数据库 准备阶段 在正式开始在前需要先准备好做爬虫的工具,本例使用chrome无头浏览器进行爬取工作,也可使用 ...

最新文章

  1. centos6.5环境安装zookeeper-3.4.5
  2. python 数据分析学什么-如何学习Python数据分析呢?老男孩Python培训
  3. 树莓派应用实例5:测量土壤湿度
  4. dreamweaver中的JSP的编程环境配置
  5. ElasticSearch常用命令记录
  6. IDEA 自动生成类注释和方法注释
  7. 您已到达6300千米深度,速度8 公里/秒,正在穿过地心 [置顶]
  8. MySQL新建数据库时utf8_general_ci编码解释
  9. linux驱动编写(虚拟字符设备编写)
  10. 在缺乏贷后数据的情况下做好策略的调整把控
  11. Eclipse的.properties文件输出中文成unicode编码
  12. 如何用iso文件制作U盘启动
  13. WebRTC 之 RTX
  14. 测试方法之JUnit单元测试
  15. 主流漫游技术-OKC802.11r介绍
  16. 7-22 龟兔赛跑 (20分) Python
  17. 【面试】google电面等
  18. 生硬的论文,非得写什么架构设计
  19. 一款勒索病毒的详细分析
  20. Word中字号和磅值的对应关系

热门文章

  1. 怎么写年终工作总结,能让老板更认可我?
  2. Ubuntu 挂载移动硬盘-NTFS格式
  3. 单片机简易电压表c语言代码,单片机制作的数字电压表及源代码
  4. html如何链接excel文件,html链接到excel表格数据-怎么用html实现excel表格
  5. 丑小鸭课件软件测试,《丑小鸭的故事》课件.ppt
  6. linux icmp 权限,Linux Iptables允许或阻止ICMP ping请求
  7. 支付宝微信个人收款码可继续使用
  8. 设置数据库中表的关系图
  9. cv2.show显示图片空白
  10. 淮北师范大学ACM-ICPC语法直播2