Python爬虫实现模拟点击动态页面


Posted in Python onMarch 05, 2020

动态页面的模拟点击:

以斗鱼直播为例:http://www.douyu.com/directory/all

爬取每页的房间名、直播类型、主播名称、在线人数等数据,然后模拟点击下一页,继续爬取

代码如下

#!/usr/bin/python3
# -*- coding:utf-8 -*-
__author__ = 'mayi'
 
"""
动态页面的模拟点击:
  模拟点击斗鱼直播:http://www.douyu.com/directory/all
  爬取每页房间名、直播类型、主播名称、在线人数等数据,然后模拟点击下一页,继续爬取
"""
 
from selenium import webdriver
import json
 
# 调用环境变量指定的PhantomJS浏览器创建浏览器对象,executable_path:指定PhantomJS位置
driver = webdriver.PhantomJS(executable_path = r"D:\Program Files\phantomjs\bin\phantomjs")
from bs4 import BeautifulSoup
 
class DouyuSpider(object):
  """
  爬虫类
  """
  def __init__(self):
    self.url = "http://www.douyu.com/directory/all/"
    self.driver = webdriver.PhantomJS()
    self.file_name = open("douyu.json", "w", encoding = "utf-8")
 
  def run(self):
    """
    爬虫开始工作
    """
    self.driver.get(self.url)
    # 循环处理每一页,直至最后一页
    page = 1
    start_flag = True
    while True:
      # 等待3秒,防止访问过于频繁
      self.driver.implicitly_wait(3)
      print("正在处理第" + page + "页......")
      page += 1
      # 解析
      soup = BeautifulSoup(self.driver.page_source, "lxml")
      # 在线直播部分
      online_live = soup.find_all('ul', {'id': 'live-list-contentbox'})[0]
      # 房间列表
      live_list = online_live.find_all('li')
      # 处理每一个房间
      for live in live_list:
        # 房间名、直播类型、主播名称、在线人数
        # 房间名
        home_name = live.find_all('h3', {'class': 'ellipsis'})[0].get_text().strip()
        # 直播类型
        live_type = live.find_all('span', {'class': 'tag ellipsis'})[0].get_text().strip()
        # 主播名称
        anchor_name = live.find_all('span', {'class': 'dy-name ellipsis fl'})[0].get_text().strip()
        # 在线人数
        online_num = live.find_all('span', {'class' :'dy-num fr'})[0].get_text().strip()
        # print(home_name, live_type, anchor_name, online_num)
        item = {}
        item["房间名"] = home_name
        item["直播类型"] = live_type
        item["主播名称"] = anchor_name
        item["在线人数"] = online_num
        if start_flag:
          start_flag = False
          content = "[\n" + json.dumps(item)
        else:
          content = ",\n" + json.dumps(item)
        self.file_name.write(content)
      # page_source.find()未找到内容则返回-1
      if self.driver.page_source.find('shark-pager-disable-next') != -1:
        # 已到最后一页
        break
      # 模拟点击下一页
      self.driver.find_element_by_class_name('shark-pager-next').click()
 
    # 爬虫结束前关闭文件
    self.file_name.write("\n]")
    self.file_name.close()
if __name__ == '__main__':
  douyu = DouyuSpider()
  douyu.run()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现爬虫下载美女图片
Jul 14 Python
Python中%r和%s的详解及区别
Mar 16 Python
详解Python给照片换底色(蓝底换红底)
Mar 22 Python
python脚本开机自启的实现方法
Jun 28 Python
python设置随机种子实例讲解
Sep 12 Python
Python传递参数的多种方式(小结)
Sep 18 Python
python取均匀不重复的随机数方式
Nov 27 Python
Pytorch使用MNIST数据集实现CGAN和生成指定的数字方式
Jan 10 Python
Python 中的pygame安装与配置教程详解
Feb 10 Python
Python实现井字棋小游戏
Mar 09 Python
Keras多线程机制与flask多线程冲突的解决方案
May 28 Python
python生成可执行exe控制Microsip自动填写号码并拨打功能
Jun 21 Python
python实现图片横向和纵向拼接
Mar 05 #Python
基于Python生成个性二维码过程详解
Mar 05 #Python
Python callable内置函数原理解析
Mar 05 #Python
python实现图像拼接
Mar 05 #Python
Python求两个字符串最长公共子序列代码实例
Mar 05 #Python
Python操作MongoDb数据库流程详解
Mar 05 #Python
Python文字截图识别OCR工具实例解析
Mar 05 #Python
You might like
PHP Echo字符串的连接格式
2016/03/07 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
2018/02/07 PHP
PHP支付宝当面付2.0代码
2018/12/21 PHP
JQuery Dialog(JS 模态窗口,可拖拽的DIV)
2010/02/07 Javascript
在vs2010中调试javascript代码方法
2011/02/11 Javascript
浅析JavaScript中的typeof运算符
2013/11/30 Javascript
JS数组去重与取重的示例代码
2014/01/24 Javascript
js 获取、清空input type="file"的值示例代码
2014/02/19 Javascript
js设置文本框中焦点位置在最后的示例代码(简单实用)
2014/03/04 Javascript
JS实现日期时间动态显示的方法
2015/12/07 Javascript
JS判断是否长按某一键的方法
2016/03/02 Javascript
AngularJS基础 ng-include 指令示例讲解
2016/08/01 Javascript
用js实现简单算法的实例代码
2016/09/24 Javascript
简单谈谈ES6的六个小特性
2016/11/18 Javascript
JavaScript文件的同步和异步加载的实现代码
2017/08/19 Javascript
详解vue + vuex + directives实现权限按钮的思路
2017/10/24 Javascript
新版小程序登录授权的方法
2018/12/12 Javascript
bootstrap-treeview实现多级树形菜单 后台JSON格式如何组织?
2019/07/26 Javascript
vue cli3 调用百度翻译API翻译页面的实现示例
2019/09/13 Javascript
微信小程序和H5页面间相互跳转代码实例
2019/09/19 Javascript
浅谈vue中使用编辑器vue-quill-editor踩过的坑
2020/08/03 Javascript
python持久性管理pickle模块详细介绍
2015/02/18 Python
Python实现PS图像明亮度调整效果示例
2018/01/23 Python
分享Pycharm中一些不为人知的技巧
2018/04/03 Python
使用python itchat包爬取微信好友头像形成矩形头像集的方法
2019/02/21 Python
解决reload(sys)后print失效的问题
2020/04/25 Python
HTML5 Notification(桌面提醒)功能使用实例
2014/03/17 HTML / CSS
Omio西班牙:全欧洲低价大巴、火车和航班搜索和比价
2017/02/11 全球购物
印度电子产品购物网站:Vijay Sales
2021/02/16 全球购物
临床医学专业个人的自我评价
2013/09/27 职场文书
电子技术专业中专生的自我评价
2013/12/17 职场文书
给酒店员工的表扬信
2014/01/11 职场文书
小学国庆节活动方案
2014/02/11 职场文书
《藤野先生》教学反思
2014/02/19 职场文书
2014办公室副主任四风对照检查材料思想汇报
2014/09/20 职场文书
熟背这些句子,让您的英语口语突飞猛进(135句)
2019/09/06 职场文书