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网络编程之读取网站根目录实例
Sep 30 Python
python编程使用协程并发的优缺点
Sep 20 Python
为什么Python中没有"a++"这种写法
Nov 27 Python
自学python的建议和周期预算
Jan 30 Python
python绘制地震散点图
Jun 18 Python
django 微信网页授权登陆的实现
Jul 30 Python
python利用7z批量解压rar的实现
Aug 07 Python
python TK库简单应用(实时显示子进程输出)
Oct 29 Python
Python3 字典dictionary入门基础附实例
Feb 10 Python
Python3开发环境搭建详细教程
Jun 18 Python
Flask-SocketIO服务端安装及使用代码示例
Nov 26 Python
python实现学生信息管理系统(精简版)
Nov 27 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使用DirectoryIterator显示下拉文件列表的方法
2015/03/13 PHP
PHP 9 大缓存技术总结
2015/09/17 PHP
Laravle eloquent 多对多模型关联实例详解
2017/11/22 PHP
php empty 函数判断结果为空但实际值却为非空的原因解析
2018/05/28 PHP
JavaScript CSS菜单功能 改进版
2008/12/20 Javascript
jquery选择符快速提取web表单数据示例
2014/03/27 Javascript
浅谈Javascript中深复制
2014/12/01 Javascript
jQuery制作简单柱状图实例
2015/01/28 Javascript
JavaScript使用push方法添加一个元素到数组末尾用法实例
2015/04/06 Javascript
JavaScript计划任务后台运行的方法
2015/12/18 Javascript
基于javascript实现全屏漂浮广告
2016/03/31 Javascript
BootStrap selectpicker
2016/06/20 Javascript
AngularJS 工作原理详解
2016/08/18 Javascript
javascript 开发之百度地图使用到的js函数整理
2017/05/19 Javascript
vue-for循环嵌套操作示例
2019/01/28 Javascript
vue.js自定义组件实现v-model双向数据绑定的示例代码
2020/01/08 Javascript
react组件基本用法示例小结
2020/04/27 Javascript
python通过BF算法实现关键词匹配的方法
2015/03/13 Python
python实现各进制转换的总结大全
2017/06/18 Python
python中 chr unichr ord函数的实例详解
2017/08/06 Python
Python 实现一行输入多个数字(用空格隔开)
2020/04/29 Python
基于python计算并显示日间、星期客流高峰
2020/05/07 Python
Python 判断时间是否在时间区间内的实例
2020/05/16 Python
Java Unsafe类实现原理及测试代码
2020/09/15 Python
python在协程中增加任务实例操作
2021/02/28 Python
a标签下载链接的简单实现
2016/09/13 HTML / CSS
全球在线商店:BerryLook
2019/04/14 全球购物
智能家居、吸尘器、滑板车、电动自行车网上购物:Geekmaxi
2021/01/18 全球购物
博柏利美国官方网站:Burberry美国
2020/11/19 全球购物
就业自荐信
2013/12/04 职场文书
酒店管理求职信范文
2014/04/06 职场文书
学雷锋志愿者活动方案
2014/08/21 职场文书
毕业生班级鉴定评语
2015/01/04 职场文书
经典搞笑版检讨书
2015/02/19 职场文书
2015年度护士个人工作总结
2015/04/09 职场文书
2015年度优秀员工获奖感言
2015/07/31 职场文书