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的常见命令注入威胁
Feb 18 Python
简单介绍Python的Django框架加载模版的方式
Jul 20 Python
Python实现简单的代理服务器
Jul 25 Python
python编程开发之类型转换convert实例分析
Nov 13 Python
Python 内置函数complex详解
Oct 23 Python
基于python 字符编码的理解
Sep 02 Python
Python实现在线暴力破解邮箱账号密码功能示例【测试可用】
Sep 06 Python
浅谈pandas中Dataframe的查询方法([], loc, iloc, at, iat, ix)
Apr 10 Python
Pythony运维入门之Socket网络编程详解
Apr 15 Python
python 标准差计算的实现(std)
Jul 29 Python
python中温度单位转换的实例方法
Dec 27 Python
Python使用random模块实现掷骰子游戏的示例代码
Apr 29 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函数解决SQL injection
2006/10/09 PHP
PHP文件下载类
2006/12/06 PHP
真正的ZIP文件操作类(php)
2007/07/21 PHP
php foreach 使用&(与运算符)引用赋值要注意的问题
2010/02/16 PHP
php的日期处理函数及uchome的function_coomon中日期处理函数的研究
2011/01/12 PHP
114啦源码(114la)不能生成地方房产和地方报刊问题4级页面0字节的解决方法
2012/01/12 PHP
PHP获取文件夹内文件数的方法
2015/03/12 PHP
微信公众平台DEMO(PHP)
2016/05/04 PHP
Yii编程开发常见调用技巧集锦
2016/07/15 PHP
js的onload事件及初始化按钮事件示例代码
2013/09/25 Javascript
javascript中的if语句使用介绍
2013/11/20 Javascript
js实现绿白相间竖向网页百叶窗动画切换效果
2015/03/02 Javascript
JavaScript访问字符串中单个字符的两种方法
2015/07/03 Javascript
详解javascript函数的参数
2015/11/10 Javascript
jquery 判断selection range 是否在容器中的简单实例
2016/08/02 Javascript
Node.js中sequelize时区的配置方法
2017/12/10 Javascript
[06:48]DOTA2-DPC中国联赛2月26日Recap集锦
2021/03/11 DOTA
python代码检查工具pylint 让你的python更规范
2012/09/05 Python
在MAC上搭建python数据分析开发环境
2016/01/26 Python
python实现简单购物商城
2016/05/21 Python
django admin添加数据自动记录user到表中的实现方法
2018/01/05 Python
Pycharm取消py脚本中SQL识别的方法
2018/11/29 Python
Python3爬虫全国地址信息
2019/01/05 Python
一款利用css3的鼠标经过动画显示详情特效的实例教程
2014/12/29 HTML / CSS
美国现代家具和家居商店:Apt2B
2016/08/29 全球购物
TripAdvisor土耳其网站:全球知名旅行社区,真实旅客评论
2017/04/17 全球购物
Cult Gaia官网:美国生活方式品牌
2019/08/16 全球购物
LN-CC日本:高端男装和女装的奢侈时尚目的地
2019/09/01 全球购物
我想声明一个指针并为它分配一些空间, 但却不行。这些代码有什么 问题?char *p; *p = malloc(10);
2016/10/06 面试题
总账会计岗位职责
2014/03/13 职场文书
教师新年寄语
2014/04/03 职场文书
付款承诺函范文
2015/01/21 职场文书
社区公民道德宣传日活动总结
2015/03/23 职场文书
2016大学生国家助学贷款承诺书
2016/03/25 职场文书
Netty分布式客户端处理接入事件handle源码解析
2022/03/25 Java/Android
Python捕获、播放和保存摄像头视频并提高视频清晰度和对比度
2022/04/14 Python