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语言描述机器学习之Logistic回归算法
Dec 21 Python
Python中的探索性数据分析(功能式)
Dec 22 Python
完美解决Pycharm无法导入包的问题 Unresolved reference
May 18 Python
Appium+python自动化之连接模拟器并启动淘宝APP(超详解)
Jun 17 Python
pycharm新建一个python工程步骤
Jul 16 Python
Python中的相关分析correlation analysis的实现
Aug 29 Python
django 中使用DateTime常用的时间查询方式
Dec 03 Python
对django 2.x版本中models.ForeignKey()外键说明介绍
Mar 30 Python
为什么说python适合写爬虫
Jun 11 Python
如何解决flask修改静态资源后缓存文件不能及时更改问题
Aug 02 Python
python用Tkinter做自己的中文代码编辑器
Sep 07 Python
python定义具名元组实例操作
Feb 28 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函数常用用法小结
2010/02/08 PHP
destoon公司主页模板风格的添加方法
2014/06/20 PHP
PHP环境中Memcache的安装和使用
2015/11/05 PHP
PHP简单判断iPhone、iPad、Android及PC设备的方法
2016/10/11 PHP
PHP读取文件的常见几种方法
2016/11/03 PHP
创建无限极分类树型结构的简单方法
2017/06/20 PHP
PHP iconv()函数字符编码转换的问题讲解
2019/03/22 PHP
破除网页鼠标右键被禁用的绝招大全
2006/12/27 Javascript
js猜数字小游戏的简单实现代码
2013/07/02 Javascript
推荐10 款 SVG 动画的 JavaScript 库
2015/03/24 Javascript
jquery form表单获取内容以及绑定数据
2016/02/24 Javascript
bootstrap中模态框、模态框的属性实例详解
2017/02/17 Javascript
JS常见算法详解
2017/02/28 Javascript
React Native 自定义下拉刷新上拉加载的列表的示例
2018/03/01 Javascript
JavaScript反射与依赖注入实例详解
2018/05/29 Javascript
JS原生带缩略图的图片切换效果
2018/10/10 Javascript
react高阶组件添加和删除props
2019/04/26 Javascript
layui 关闭open弹出框 刷新table表格页面的方法
2019/09/16 Javascript
Python实现的百度站长自动URL提交小工具
2014/06/27 Python
在Python的Django框架中包装视图函数
2015/07/20 Python
在Apache服务器上同时运行多个Django程序的方法
2015/07/22 Python
python计算auc指标实例
2017/07/13 Python
python爬虫_微信公众号推送信息爬取的实例
2017/10/23 Python
详解Python中的四种队列
2018/05/21 Python
Python3中关于cookie的创建与保存
2018/10/21 Python
python基于itchat模块实现微信防撤回
2019/04/29 Python
python Web flask 视图内容和模板实现代码
2019/08/23 Python
python自动保存百度盘资源到百度盘中的实例代码
2019/08/26 Python
浅析pandas 数据结构中的DataFrame
2019/10/12 Python
pygame实现非图片按钮效果
2019/10/29 Python
Numpy中np.max的用法及np.maximum区别
2020/11/27 Python
机械工程师求职自我评价
2013/09/23 职场文书
交通安全月活动总结
2015/05/08 职场文书
2016班级元旦联欢会开幕词
2016/03/04 职场文书
浅析python中特殊文件和特殊函数
2022/02/24 Python
vue中使用mockjs配置和使用方式
2022/04/06 Vue.js