Python爬虫实现模拟点击动态页面
作者:骑着螞蟻流浪 发布时间:2022-05-19 05:21:19
标签:Python,爬虫,模拟,点击
动态页面的模拟点击:
以斗鱼直播为例: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()
来源:https://www.cnblogs.com/mayi0312/p/7236472.html
0
投稿
猜你喜欢
- 经过了上个星期的努力学习,对处理html又有了新的发现感觉真的很不错可以说js的威力在处理html代码方面我又有所领悟了1、截取特定长度字符
- SSI是英文Server Side Includes的缩写,翻译成中文就是服务器端包含的意思。从技术角度上说,SSI就是在HTML文件中,可
- 有时候,规划师(或需求、交互)把内容呈现的框架草图搭建好后,就直接“丢”给了设计师,让设计师在画好的框架里去美化内容,出来后的效果,往往达不
- HTML 5基本思维概念形成于2003年,之后W3C对页面超文本应用技术工作小组(WHATWG)开发的HTML草图颇感兴趣,这个小组的开发人
- 目录完整项目地址:首页安装特点完整项目地址:https://github.com/zsjtoby/DevOpsCloud欢迎使用极云监控系统
- 如代码1所示: // 代码 1 // 外观层类 class LWordHomePage { // 添加留言 public function
- 什么是错误页面?是指链接指向的网页现在失效了,原因可能是用户输错了地址,也可能是网站结构调整,内容删除,或者地址变更都有可能出现这种情况。那
- 我就废话不多说了,大家还是直接看代码吧!import matplotlib.pyplot as pltimport numpy as npf
- 今天分享的这篇文章,文字不多,代码为主。绝对干货,童叟无欺,主要分享了提升 Python 性能的 20 个技巧,教你如何告别慢Python。
- 为什么要使用滤波消除图像中的噪声成分叫作图像的平滑化或滤波操作。信号或图像的能量大部分集中在幅度谱的低频和中频段是很常见的,而在较高频段,感
- Python中的模块(.py文件)在创建之初会自动加载一些内建变量,__name__就是其中之一。Python模块中通常会定义很多变量和函数
- 一:最近,经常碰到有网友问,如何使vbscript和javascipt传递变量。不知道为什么要这么做。因为每一种脚本语言几乎都可以完成所需要
- 这里推荐使用OTK脚本安装Oracle,会大大提高安装Oracle的成功系数。DescriptionoraToolKit is the Sw
- 每点击一次按钮,弹出一个对话框(子窗口),同时开启一个子线程来执行任务并更新对话框内容,关闭对话框则关闭对应子线程1. 建立一个简单的主界面
- 一、功能说明:1. 多线程方式抓取代理服务器,并多线程验证代理服务器ps 代理服务器是从http://www.cnproxy.com/ (测
- 很多设计师都会遇到这样的问题。一个产品会有很多种方式去包装,其中包括很多功能和很多体验。功能越多会被认为越实用,体验越好会被认为越方便。方便
- CacheControl 属性设置是否可缓存由 ASP 生成的输出。默认地,代理服务器不会保持缓存副本。语法:response.CacheC
- 在我们开始一个项目的设计的时候,脑子里肯定有无数的构想。是做视觉冲击强烈、夺人眼球的绚丽风格?还是复古的拼贴风?又或者目前最in的极简主义设
- 大家好,我又回来了。昨天在上厕所的时候突发奇想,当你把usb插进去的时候,能不能自动执行usb上的程序。查了一下,发现只有windows上可
- 需求:主线程开启了多个线程去干活,每个线程需要完成的时间不同,但是在干完活以后都要通知给主线程下面上代码:#!/usr/bin/python