# 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. 几个 Cookie 操作例子的分析

    MDN 上提供了操作 Cookie 的若干个例子,也有一个简单的 cookie 框架,今天尝试分析一下,最后是 jquery-cookie 插件的分析. document.cookie 的操作例子 例 ...

  2. bzoj3624(铺黑白路)(并查集维护)

    题意网上自己随便找,绝对是找的到的. 题解:(白边表示鹅卵石路,黑边表示水泥路)这道题的解法,先考虑将黑边所有都先连起来,组成一个又一个的联通块,然后用白边去连, 如果可以联通的话,就用白边去代替黑边 ...

  3. 1042 数字0-9的数量 1050 循环数组最大子段和 1062 序列中最大的数 1067 Bash游戏 V2 1092 回文字符串

    1042 数字0-9的数量 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 给出一段区间a-b,统计这个区间内0-9出现的次数.   比如 10-19,1出现11次 ...

  4. Java并发(一、概述)

    离上次写博客又隔了很久,心中有愧.在我不断使用Java的过程中,几乎都是拿来就用,就Java并发这块我还没有系统的梳理过,趁着国庆有空余时间,把它梳理一遍.以下部分内容参考相关书籍,以作学习之用,特此 ...

  5. Theano学习-scan循环

    \(1.Scan\) 通用的一般形式,可用于循环 减少和映射(对维数循环)是特殊的 \(scan\) 对输入序列进行 \(scan\) 操作,每一步都能得到一个输出 \(scan\) 能看到定义函数的 ...

  6. PHP的ntohl网络字节序函数及相关知识

    PHP与C服务器的socket通信,在做数据转换的时候,PHP没有提供对应将网络字节序和机器字节序相互转换的程序,但是根据函数的意义,我们可以做相应的转换来实现这一函数: function ntohl ...

  7. Ubuntu16.04 install OpenJDK8

    1.按Ctrl + Alt + T打开终端.打开后,运行下面的命令来添加PPA:sudo add-apt-repository ppa:openjdk-r/ppa2.之后,更新系统包缓存并安装Open ...

  8. Python实战之Selenium自动化测试web登录

    #!/usr/bin/env python3 # -*- coding:utf-8 -*- from selenium import webdriver from selenium.webdriver ...

  9. Access-Control-Allow-Origin与Ajax跨域

    问题 在某域名下使用Ajax向另一个域名下的页面请求数据,会遇到跨域问题.另一个域名必须在response中添加 Access-Control-Allow-Origin 的header,才能让前者成功 ...

  10. sa账户和密码丢失如何找回

    来自:http://www.cnblogs.com/xred/archive/2012/03/09/2386185.html 在网上看了很多如何修改SQLServer2005的密码的方法.大多数都是转 ...