系统城装机大师 - 固镇县祥瑞电脑科技销售部宣传站!

当前位置:首页 > 脚本中心 > python > 详细页面

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

时间:2020-03-05来源:电脑系统城作者:电脑系统城

动态页面的模拟点击:

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

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

代码如下


 
  1. #!/usr/bin/python3
  2. # -*- coding:utf-8 -*-
  3. __author__ = 'mayi'
  4.  
  5. """
  6. 动态页面的模拟点击:
  7. 模拟点击斗鱼直播:http://www.douyu.com/directory/all
  8. 爬取每页房间名、直播类型、主播名称、在线人数等数据,然后模拟点击下一页,继续爬取
  9. """
  10.  
  11. from selenium import webdriver
  12. import json
  13.  
  14. # 调用环境变量指定的PhantomJS浏览器创建浏览器对象,executable_path:指定PhantomJS位置
  15. driver = webdriver.PhantomJS(executable_path = r"D:\Program Files\phantomjs\bin\phantomjs")
  16. from bs4 import BeautifulSoup
  17.  
  18. class DouyuSpider(object):
  19. """
  20. 爬虫类
  21. """
  22. def __init__(self):
  23. self.url = "http://www.douyu.com/directory/all/"
  24. self.driver = webdriver.PhantomJS()
  25. self.file_name = open("douyu.json", "w", encoding = "utf-8")
  26.  
  27. def run(self):
  28. """
  29. 爬虫开始工作
  30. """
  31. self.driver.get(self.url)
  32. # 循环处理每一页,直至最后一页
  33. page = 1
  34. start_flag = True
  35. while True:
  36. # 等待3秒,防止访问过于频繁
  37. self.driver.implicitly_wait(3)
  38. print("正在处理第" + page + "页......")
  39. page += 1
  40. # 解析
  41. soup = BeautifulSoup(self.driver.page_source, "lxml")
  42. # 在线直播部分
  43. online_live = soup.find_all('ul', {'id': 'live-list-contentbox'})[0]
  44. # 房间列表
  45. live_list = online_live.find_all('li')
  46. # 处理每一个房间
  47. for live in live_list:
  48. # 房间名、直播类型、主播名称、在线人数
  49. # 房间名
  50. home_name = live.find_all('h3', {'class': 'ellipsis'})[0].get_text().strip()
  51. # 直播类型
  52. live_type = live.find_all('span', {'class': 'tag ellipsis'})[0].get_text().strip()
  53. # 主播名称
  54. anchor_name = live.find_all('span', {'class': 'dy-name ellipsis fl'})[0].get_text().strip()
  55. # 在线人数
  56. online_num = live.find_all('span', {'class' :'dy-num fr'})[0].get_text().strip()
  57. # print(home_name, live_type, anchor_name, online_num)
  58. item = {}
  59. item["房间名"] = home_name
  60. item["直播类型"] = live_type
  61. item["主播名称"] = anchor_name
  62. item["在线人数"] = online_num
  63. if start_flag:
  64. start_flag = False
  65. content = "[\n" + json.dumps(item)
  66. else:
  67. content = ",\n" + json.dumps(item)
  68. self.file_name.write(content)
  69. # page_source.find()未找到内容则返回-1
  70. if self.driver.page_source.find('shark-pager-disable-next') != -1:
  71. # 已到最后一页
  72. break
  73. # 模拟点击下一页
  74. self.driver.find_element_by_class_name('shark-pager-next').click()
  75.  
  76. # 爬虫结束前关闭文件
  77. self.file_name.write("\n]")
  78. self.file_name.close()
  79. if __name__ == '__main__':
  80. douyu = DouyuSpider()
  81. douyu.run()

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

分享到:

相关信息

系统教程栏目

栏目热门教程

人气教程排行

站长推荐

热门系统下载