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查询mysql中文乱码问题
Nov 09 Python
Python 字典dict使用介绍
Nov 30 Python
Python实现将数据库一键导出为Excel表格的实例
Dec 30 Python
利用python实现简单的邮件发送客户端示例
Dec 23 Python
Python回文字符串及回文数字判定功能示例
Mar 20 Python
实例介绍Python中整型
Feb 11 Python
python retrying模块的使用方法详解
Sep 25 Python
python3实现绘制二维点图
Dec 04 Python
python去除删除数据中\u0000\u0001等unicode字符串的代码
Mar 06 Python
如何基于python3和Vue实现AES数据加密
Mar 27 Python
Python通过getattr函数获取对象的属性值
Oct 16 Python
python爬虫利器之requests库的用法(超全面的爬取网页案例)
Dec 17 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破解防盗链图片的一个简单方法
2014/06/07 PHP
PHP中使用OpenSSL生成证书及加密解密
2017/02/05 PHP
php中照片旋转 (orientation) 问题的正确处理
2017/02/16 PHP
用JavaScript玩转游戏物理(一)运动学模拟与粒子系统
2010/06/19 Javascript
js中 关于undefined和null的区别介绍
2013/04/16 Javascript
jQuery实现提交按钮点击后变成正在处理字样并禁止点击的方法
2015/03/24 Javascript
Bootstrap学习系列之使用 Bootstrap Typeahead 组件实现百度下拉效果
2016/07/07 Javascript
js基本算法:冒泡排序,二分查找的简单实例
2016/10/08 Javascript
基于NodeJS+MongoDB+AngularJS+Bootstrap开发书店案例分析
2017/01/12 NodeJs
详解使用Vue Router导航钩子与Vuex来实现后退状态保存
2017/09/11 Javascript
JS二分查找算法详解
2017/11/01 Javascript
vue-cli2.9.3 详细教程
2018/04/23 Javascript
微信小程序如何实现radio单选框单击打勾和取消
2020/01/21 Javascript
使用next.js开发网址缩短服务的方法
2020/06/17 Javascript
JS检测浏览器开发者工具是否打开的方法详解
2020/10/02 Javascript
python 切片和range()用法说明
2013/03/24 Python
python遍历文件夹下所有excel文件
2018/01/03 Python
Python实现抢购IPhone手机
2018/02/07 Python
用Python读取几十万行文本数据
2018/12/24 Python
python实现在遍历列表时,直接对dict元素增加字段的方法
2019/01/15 Python
springboot配置文件抽离 git管理统 配置中心详解
2019/09/02 Python
使用Python的Turtle绘制哆啦A梦实例
2019/11/21 Python
如何通过命令行进入python
2020/07/06 Python
python+pygame实现坦克大战小游戏的示例代码(可以自定义子弹速度)
2020/08/11 Python
Python加载数据的5种不同方式(收藏)
2020/11/13 Python
详解利用canvas实现环形进度条的方法
2019/06/12 HTML / CSS
Omio中国:全欧洲低价大巴、火车和航班搜索和比价
2018/08/09 全球购物
求职简历的自我评价怎样写好
2013/10/07 职场文书
小学生节约用水倡议书
2014/05/15 职场文书
创建绿色学校先进个人材料
2014/08/20 职场文书
2014法院四风问题对照检查材料思想汇报
2014/10/04 职场文书
岗位竞聘报告范文
2014/11/06 职场文书
社区三八妇女节活动总结
2015/02/06 职场文书
运动会加油稿
2015/07/22 职场文书
MySQL 那些常见的错误设计规范,你都知道吗
2021/07/16 MySQL
如何通过简单的代码描述Angular父组件、子组件传值
2022/04/07 Javascript