Python爬虫实现模拟点击动态页面
动态页面的模拟点击:
以斗鱼直播为例:http://www.douyu.com/directory/all
爬取每页的房间名、直播类型、主播名称、在线人数等数据,然后模拟点击下一页,继续爬取
代码如下
#!/usr/bin/python3
#-*-coding:utf-8-*-
__author__='mayi'
"""
动态页面的模拟点击:
模拟点击斗鱼直播:http://www.douyu.com/directory/all
爬取每页房间名、直播类型、主播名称、在线人数等数据,然后模拟点击下一页,继续爬取
"""
fromseleniumimportwebdriver
importjson
#调用环境变量指定的PhantomJS浏览器创建浏览器对象,executable_path:指定PhantomJS位置
driver=webdriver.PhantomJS(executable_path=r"D:\ProgramFiles\phantomjs\bin\phantomjs")
frombs4importBeautifulSoup
classDouyuSpider(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")
defrun(self):
"""
爬虫开始工作
"""
self.driver.get(self.url)
#循环处理每一页,直至最后一页
page=1
start_flag=True
whileTrue:
#等待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')
#处理每一个房间
forliveinlive_list:
#房间名、直播类型、主播名称、在线人数
#房间名
home_name=live.find_all('h3',{'class':'ellipsis'})[0].get_text().strip()
#直播类型
live_type=live.find_all('span',{'class':'tagellipsis'})[0].get_text().strip()
#主播名称
anchor_name=live.find_all('span',{'class':'dy-nameellipsisfl'})[0].get_text().strip()
#在线人数
online_num=live.find_all('span',{'class':'dy-numfr'})[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
ifstart_flag:
start_flag=False
content="[\n"+json.dumps(item)
else:
content=",\n"+json.dumps(item)
self.file_name.write(content)
#page_source.find()未找到内容则返回-1
ifself.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()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。