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编程中的反模式实例分析
Dec 08 Python
python中引用与复制用法实例分析
Jun 04 Python
详解Python的Django框架中的Cookie相关处理
Jul 22 Python
Python基于回溯法子集树模板解决0-1背包问题实例
Sep 02 Python
Python基于dom操作xml数据的方法示例
May 12 Python
Python实现字典按key或者value进行排序操作示例【sorted】
May 03 Python
python对文件目录的操作方法实例总结
Jun 24 Python
PyQt5下拉式复选框QComboCheckBox的实例
Jun 25 Python
Python用来做Web开发的优势有哪些
Aug 05 Python
Python利器openpyxl之操作excel表格
Apr 17 Python
教你怎么用Python实现多路径迷宫
Apr 29 Python
Python实现打乒乓小游戏
Sep 25 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
thinkPHP模型初始化实例分析
2015/12/03 PHP
PHP实现的AES 128位加密算法示例
2019/09/16 PHP
jquery遍历input取得input的name
2009/04/27 Javascript
jquery JSON的解析方式
2009/07/25 Javascript
分享27款非常棒的jQuery 表单插件
2011/03/28 Javascript
JS实现页面超时后自动跳转到登陆页面
2015/01/19 Javascript
jquery悬浮提示框完整实例
2016/01/13 Javascript
jQuery 中的 DOM 操作
2016/04/26 Javascript
jQuery.form插件的使用及跨域异步上传文件
2016/04/27 Javascript
Vue中之nextTick函数源码分析详解
2017/10/17 Javascript
详解在vue-cli项目下简单使用mockjs模拟数据
2018/10/19 Javascript
jQuery使用bind动态绑定事件无效的处理方法
2018/12/11 jQuery
微信小程序使用map组件实现获取定位城市天气或者指定城市天气数据功能
2019/01/22 Javascript
vue实现todolist功能、todolist组件拆分及todolist的删除功能
2019/04/11 Javascript
小程序和web画三角形实现解析
2019/09/02 Javascript
Vue中el-form标签中的自定义el-select下拉框标签功能
2020/04/20 Javascript
详解React 条件渲染
2020/07/08 Javascript
[01:11:10]2014 DOTA2华西杯精英邀请赛 5 24 iG VS VG加赛
2014/05/26 DOTA
[07:54]DOTA2 MV《我的动力鞋》 ImbaTV 出品
2014/11/21 DOTA
python解析中国天气网的天气数据
2014/03/21 Python
最近Python有点火? 给你7个学习它的理由!
2017/06/26 Python
Python操作MySQL数据库的方法
2018/06/20 Python
python字符串Intern机制详解
2019/07/01 Python
Django REST框架创建一个简单的Api实例讲解
2019/11/05 Python
numpy.ndarray 实现对特定行或列取值
2019/12/05 Python
如何理解python面向对象编程
2020/06/01 Python
你不知道的5个HTML5新功能
2016/06/28 HTML / CSS
韩国著名的在线综合购物网站:Akmall
2016/08/07 全球购物
英国Flybe航空官网:欧洲最大的独立支线廉价航空公司
2019/07/15 全球购物
Michael Kors英国官网:美国奢侈品品牌
2019/11/13 全球购物
俄罗斯最大的香水和化妆品网上商店:Randewoo
2020/11/05 全球购物
Tomcat中怎么使用log4j输出所有的log
2016/07/07 面试题
linux比较文件内容的命令是什么
2013/03/04 面试题
诉讼代理人授权委托书
2014/04/08 职场文书
公司年夜饭通知
2015/04/25 职场文书
CSS3 实现NES游戏机的示例代码
2021/04/21 HTML / CSS