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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。