# coding=utf-8
from selenium import webdriver
import json
import time
import pymongo

class Douyu:
  def __init__(self):
    self.driver = webdriver.Chrome()
    # 发送首页请求
    self.driver.get("https://www.douyu.com/directory/all")
    self.host = '127.0.0.1'
    self.port = 27017
    self.DBname = 'douyu'

  def get_content(self):
    time.sleep(3)
    li_list = self.driver.find_elements_by_xpath('//ul[@id="live-list-contentbox"]/li')
    # print(li_list)

    contents = []
    # 遍历房间列表
    for i in li_list:
      item = {}
      # 获取房间图片
      item['img'] = i.find_element_by_xpath('./a//img').get_attribute("src")
      # 获取房间名字
      item['title'] = i.find_element_by_xpath('./a').get_attribute("title")
      # 获取房间分类
      item['category'] = i.find_element_by_xpath('./a/div[@class="mes"]/div/span').text
      # 获取主播名字
      item['name'] = i.find_element_by_xpath("./a/div[@class='mes']/p/span[1]").text

      # 观看人数
      item['watch_num'] = i.find_element_by_xpath("./a/div[@class='mes']/p/span[2]").text
      # print(item)
      contents.append(item)
    return contents

  # 保存到MongoDB
  def save_content(self, contents):
    # 创建MongoDB连接
    client = pymongo.MongoClient(host=self.host, port=self.port)
    # 指向指定的数据库
    mdb = client[self.DBname]
    self.post = mdb[self.DBname]
    self.post.insert(contents)

  # 保存到本地
  # def save_content(self, contents):
    # with open("douyu.json", "a") as f:
      # for content in contents:
      # json.dump(content, f, ensure_ascii=False, indent=2)
      # f.write(',\n')

  def run(self):
    # 1.发送首页请求
    # 2.获取首页信息
    contents = self.get_content()
    # 3.保存内容
    self.save_content(contents)
    # 4.循环 点击下一页按钮,直到下一页对应的class名字不再是"shark-pager-next"
    # 判断有没有下一页
    while self.driver.find_element_by_class_name("shark-pager-next"):
      # 5.点击下一页按钮
      self.driver.find_element_by_class_name("shark-pager-next").click()
      # 6.获取下一页的内容
      contents = self.get_content()
      # 7.保存内容
      self.save_content(contents)

if __name__ == '__main__':
douyu = Douyu()
douyu.run()

python3 selenium模拟登陆斗鱼提取数据保存数据库的更多相关文章

  1. Python3 使用selenium库登陆知乎并保存cookie为本地文件

    Python3 使用selenium库登陆知乎并保存cookie为本地文件 学习使用selenium库模拟登陆知乎,并将cookie保存为本地文件,然后供以后(requests模块)使用,用selen ...

  2. selenium 模拟登陆豆瓣,爬取武林外传的短评

    selenium 模拟登陆豆瓣,爬去武林外传的短评: 在最开始写爬虫的时候,抓取豆瓣评论,我们从F12里面是可以直接发现接口的,但是最近豆瓣更新,数据是JS异步加载的,所以没有找到合适的方法爬去,于是 ...

  3. php中CURL技术模拟登陆抓取数据实战,抓取某校教务处学生成绩。

    这两天有基友要php中curl抓取教务处成绩的源码,用于微信公众平台的开发.下面笔者只好忍痛割爱了.php中CURL技术模拟登陆抓取数据实战,抓取沈阳工学院教务处学生成绩. 首先,教务处登录需要验证码 ...

  4. Selenium模拟登陆百度贴吧

    Selenium模拟登陆百度贴吧 from selenium import webdriver from time import sleep from selenium.webdriver.commo ...

  5. Python3.x:定时获取页面数据存入数据库

    Python3.x:定时获取页面数据存入数据库 #间隔五分钟采集一次数据入库 import pymysql import urllib.request from bs4 import Beautifu ...

  6. 使用selenium模拟登陆淘宝、新浪和知乎

    如果直接使用selenium访问淘宝.新浪和知乎这些网址.一般会识别出这是自动化测试工具,会有反制措施.当开启开发者模式后,就可以绕过他们的检测啦.(不行的,哭笑) 如果网站只是对windows.na ...

  7. Python爬虫 —— 知乎之selenium模拟登陆获取cookies+requests.Session()访问+session序列化

    代码如下: # coding:utf-8 from selenium import webdriver import requests import sys import time from lxml ...

  8. 使用selenium模拟登陆新浪微博

    1.selenium基本使用 1.selenium安装及基本操作 selenium是一个自动化测试工具,它支持各种浏览器,包括Chrome,Safari,Firefox等主流界面浏览器驱动,也包括Ph ...

  9. 验证码破解 | Selenium模拟登陆微博

    模拟登陆微博相对来说,并不难.验证码是常规的5个随机数字字母的组合,识别起来也比较容易.主要是用到许多Selenium中的知识,如定位标签.输入信息.点击等.如对Selenium的使用并不熟悉,请先移 ...

随机推荐

  1. 1523. K-inversions URAL 求k逆序对,,,,DP加树状数组

    1523. K-inversions Time limit: 1.0 secondMemory limit: 64 MB Consider a permutation a1, a2, …, an (a ...

  2. NOIP2017SummerTraining0710

    个人感受:这套题,题目泄露,没什么好打的,第一题刚开始题目理解错误,后来还行,第二道题,打了一个50还是60分的dp,第三道暴力过了小数据,拿了200分,排名15+. 问题 A: 七天使的通讯 时间限 ...

  3. ASP.Net MVC 布局页 模板页 使用方法详细说明

    一.Views文件夹 -> Shared文件夹下的 _Layout.cshtml 母版页 @RenderBody 当创建基于_Layout.cshtml布局页面的视图时,视图的内容会和布局页面合 ...

  4. linux组网笔记

    一直以为自己linux还说的过去,事实上已经跟不上日新月异的应用需要了. 现成文档都没法看,错太多.然而毕竟是多年积累,整理一个准确的文档还是能做到的. 本机ip设置: # static interf ...

  5. 【转】open参数O_DIRECT的学习

    open参数O_DIRECT的学习 使用 O_DIRECT 需要注意的地方 posix_memalign详细解释 free:这里好几个方法我都没测试成功,最后还是用posix_memalign 对齐的 ...

  6. python Logging的使用

    日志是用来记录程序在运行过程中发生的状况,在程序开发过程中添加日志模块能够帮助我们了解程序运行过程中发生了哪些事件,这些事件也有轻重之分. 根据事件的轻重可分为以下几个级别: DEBUG: 详细信息, ...

  7. [原创]浅谈JAVA在ACM中的应用

    由于java里面有一些东西比c/c++方便(尤其是大数据高精度问题,备受广大ACMer欢迎),所以就可以灵活运用这三种来实现编程,下面是我自己在各种大牛那里总结了一些,同时加上自己平时遇到的一些jav ...

  8. Xcode9 FFmpeg冲突问题

    升级Xcode9之后,工程中FFmpeg中的avutil.h下的AVMediaType与系统的AVFoundation框架冲突了. 报错信息:Typedef 'AVMediaType' cannot ...

  9. ES6 class的继承使用细节

    ES6 class的继承与java的继承大同小异,如果学过java的话应该很容易理解,都是通过extends关键字继承. class Animal{ constructor(color){ this. ...

  10. input框内的单引号,双引号转译

    主要是在后台传前端之前先把变量值替换单引号双引号成转译付. $bianlian是要替换的变量 两种方法 1.php后台输出值先转译 //双引号替换成转译符 $bianlian=preg_replace ...