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 相关文章推荐
Windows8下安装Python的BeautifulSoup
Jan 22 Python
python实现简单ftp客户端的方法
Jun 28 Python
在类Unix系统上开始Python3编程入门
Aug 20 Python
Python打包文件夹的方法小结(zip,tar,tar.gz等)
Sep 18 Python
关于Python元祖,列表,字典,集合的比较
Jan 06 Python
Python实现基本数据结构中栈的操作示例
Dec 04 Python
答题辅助python代码实现
Jan 16 Python
PYQT5设置textEdit自动滚屏的方法
Jun 14 Python
Python画图实现同一结点多个柱状图的示例
Jul 07 Python
Pytorch实现基于CharRNN的文本分类与生成示例
Jan 08 Python
python输入一个水仙花数(三位数) 输出百位十位个位实例
May 03 Python
python 指定源路径来解决import问题的操作
Mar 04 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.ini中添加extension=php_mysqli.dll指令的说明
2007/06/14 PHP
Laravel框架实现定时Task Scheduling例子
2019/10/22 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
2020/02/21 PHP
Alliance vs Liquid BO3 第一场2.13
2021/03/10 DOTA
javascript数组的使用
2013/03/28 Javascript
用js调用迅雷下载代码的二种方法
2013/04/15 Javascript
JQuery的$命名冲突详细解析
2013/12/28 Javascript
extjs每个组件要设置唯一的ID否则会出错
2014/06/15 Javascript
angularJS中$apply()方法详解
2015/01/07 Javascript
Express实现前端后端通信上传图片之存储数据库(mysql)傻瓜式教程(二)
2015/12/10 Javascript
基于javascript实现图片懒加载
2016/01/05 Javascript
js 获取图像缩放后的实际宽高,位置等信息
2017/03/07 Javascript
Javascript 实现匿名递归的实例代码
2017/05/25 Javascript
深入理解Vue transition源码分析
2017/07/30 Javascript
jQuery Ajax向服务端传递数组参数值的实例代码
2017/09/03 jQuery
使用vue中的v-for遍历二维数组的方法
2018/03/07 Javascript
vue+ESLint 配置保存 自动格式化代码
2020/03/17 Javascript
Antd下拉选择,自动匹配功能的实现
2020/10/24 Javascript
Python标准库sched模块使用指南
2017/07/06 Python
Python动刷新抢12306火车票的代码(附源码)
2018/01/24 Python
Python 循环语句之 while,for语句详解
2018/04/23 Python
python pandas库的安装和创建
2019/01/10 Python
Python学习笔记之变量、自定义函数用法示例
2019/05/28 Python
python实现集中式的病毒扫描功能详解
2019/07/09 Python
Django urls.py重构及参数传递详解
2019/07/23 Python
Python实现Singleton模式的方式详解
2019/08/08 Python
Python基于gevent实现高并发代码实例
2020/05/15 Python
Tensorflow中批量读取数据的案列分析及TFRecord文件的打包与读取
2020/06/30 Python
python如何调用百度识图api
2020/09/29 Python
Kate Spade美国官网:纽约新兴时尚品牌,以包包闻名于世
2017/11/09 全球购物
关于毕业的广播稿
2014/01/10 职场文书
党员反对四风问题思想汇报
2014/09/12 职场文书
房屋鉴定委托书范本
2014/09/23 职场文书
教师党员个人整改措施
2014/10/27 职场文书
2014年大学生工作总结
2014/11/20 职场文书
公司内部升职自荐信
2015/03/27 职场文书