前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python爬虫实现模拟点击动态页面

Python爬虫实现模拟点击动态页面

作者头像
砸漏
发布2020-11-05 10:01:52
2.1K0
发布2020-11-05 10:01:52
举报
文章被收录于专栏:恩蓝脚本

动态页面的模拟点击:

以斗鱼直播为例:http://www.douyu.com/directory/all

爬取每页的房间名、直播类型、主播名称、在线人数等数据,然后模拟点击下一页,继续爬取

代码如下

代码语言:javascript
复制
#!/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()

以上就是本文的全部内容,希望对大家的学习有所帮助。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-09-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云直播
云直播(Cloud Streaming Services,CSS)为您提供极速、稳定、专业的云端直播处理服务,根据业务的不同直播场景需求,云直播提供了标准直播、快直播、云导播台三种服务,分别针对大规模实时观看、超低延时直播、便捷云端导播的场景,配合腾讯云视立方·直播 SDK,为您提供一站式的音视频直播解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档