# 本程序亲测有效,用于理解爬虫相关的基础知识,不足之处希望大家批评指正
from selenium import webdriver
import time class Douyu:
"""爬取斗鱼房间信息"""
def __init__(self):
# 爬取目标
self.url = 'https://www.douyu.com/directory/all'
# 获取浏览器对象
self.driver = webdriver.Chrome() def get_element_list(self):
"""获取数据"""
# 定位数据节点
li_list = self.driver.find_elements_by_xpath('//ul[@id="live-list-contentbox"]/li')
content_list = list()
for li in li_list: # 此时得到的是一条条的elememt,html节点
# 我们要获取li中的那些数据呢?
# 房间号:,主播id:,房间名:,粉丝数:,房间链接:等等根据业务需要获取
# 成对出现的数据,所以选择使用字典保存每个房间的数据信息
item = dict()
item["room_id"] = li.find_element_by_xpath('./a').get_attribute('data-rid')
item["auther"] = li.find_element_by_xpath('.//span[@class="dy-name ellipsis fl"]').text
item["room_title"] = li.find_element_by_xpath('./a').get_attribute('title')
item["fans_count"] = li.find_element_by_xpath('.//span[@class="dy-num fr"]').text
item["room_link"] = li.find_element_by_xpath('./a').get_attribute('href') print(item)
# 此时单个房间的信息已经封装完毕
# 应该将所有房间的信息封装起来,便于随时取用,由于每个房间信息相当于一个元素,所以我们可以用列表或者元组来保存
content_list.append(item) # 此时我们的到的只是一页的数据,如何的到所有数据呢?或者说怎样访问下一页?
# print(content_list) # 获取下一页按钮元素
next_url = self.driver.find_elements_by_xpath('//a[@class="shark-pager-next"]')[0]
# 注意:这里为什么用的是elements而不是element,原因是:如果我们获取到最后一页时:这个下一页按钮就不存在了,
# 用element的话就会报错,用elements就不会报错
# 因为elements获取到的是一个列表,而这个列表就一个元素,所以我们就直接取列表的第0位就可以了 print(next_url)
# 将获取到的数据返回
return content_list,next_url def save_contents(self,content_list):
"""保存数据"""
pass def run(self): # 主函数逻辑
try:
# 向目标发起访问
self.driver.get(self.url)
# 获取数据
content_list,next_url = self.get_element_list() # 接收函数返回的结果
# 保存数据
self.save_contents(content_list) while next_url is not None:
# 访问下一页
next_url.click() # 点击下一页就相当于向一个新的页面发起请求
# 跳转到下一页之后,等待页面加载完毕,否则获取不到数据,然后报错
time.sleep(3)
# 获取数据
content_list,next_url = self.get_element_list() # 接收函数返回的结果
# 保存数据
self.save_contents(content_list) except Exception as e:
# 退出浏览器
self.driver.close()
else:
# 退出浏览器
self.driver.close() if __name__ == '__main__': # 创建对象
douyu = Douyu()
# 运行程序
douyu.run()

【爬虫小程序:爬取斗鱼所有房间信息】Xpath的更多相关文章

  1. 【爬虫小程序:爬取斗鱼所有房间信息】Xpath(协程池版)

    # 本程序亲测有效,用于理解爬虫相关的基础知识,不足之处希望大家批评指正 from gevent import monkey monkey.patch_all() from gevent.pool i ...

  2. 【爬虫小程序:爬取斗鱼所有房间信息】Xpath(线程池版)

    # 本程序亲测有效,用于理解爬虫相关的基础知识,不足之处希望大家批评指正 from queue import Queue import requests from lxml import etree ...

  3. 【爬虫小程序:爬取斗鱼所有房间信息】Xpath(多线程版)

    # 本程序亲测有效,用于理解爬虫相关的基础知识,不足之处希望大家批评指正 from queue import Queue import requests from lxml import etree ...

  4. 【爬虫小程序:爬取斗鱼所有房间信息】Xpath(多进程版)

    # 本程序亲测有效,用于理解爬虫相关的基础知识,不足之处希望大家批评指正 import requests from lxml import etree from multiprocessing imp ...

  5. 基于webmagic的爬虫小应用--爬取知乎用户信息

    听到“爬虫”,是不是第一时间想到Python/php ? 多少想玩爬虫的Java学习者就因为语言不通而止步.Java是真的不能做爬虫吗? 当然不是. 只不过python的3行代码能解决的问题,而Jav ...

  6. [python爬虫] Selenium定向爬取PubMed生物医学摘要信息

    本文主要是自己的在线代码笔记.在生物医学本体Ontology构建过程中,我使用Selenium定向爬取生物医学PubMed数据库的内容.        PubMed是一个免费的搜寻引擎,提供生物医学方 ...

  7. python爬虫实战之爬取智联职位信息和博客文章信息

    1.python爬取招聘信息 简单爬取智联招聘职位信息 # !/usr/bin/env python # -*-coding:utf-8-*- """ @Author  ...

  8. Python爬虫基础--分布式爬取贝壳网房屋信息(Client)

    1. client_code01 2. client_code02 3. 这个时候运行多个client就可以分布式进行数据爬取.

  9. selenium,webdriver爬取斗鱼主播信息 实操

    from selenium import webdriver import time from bs4 import BeautifulSoup class douyuSelenium(): #初始化 ...

随机推荐

  1. requests.get爬虫模块参数

    地址和请求头参数--url和header res = requests.get(url,headers=headers) 向网站发起请求,并获取响应对象 参数 url :需要抓取的URL地址 head ...

  2. 给手机端页面留一个调试后门吧(vue)

    当我们在浏览器开发vue页面时,由于浏览器对于调试有天然的支持,我们开发起来很方便.但是现在已经进入了移动端时代,移动端页面的需求越来越大. 在开发移动端页面的时候我们通常是在浏览器完成开发完成,之后 ...

  3. codeforces 688 E. The Values You Can Make(01背包+思维)

    题目链接:http://codeforces.com/contest/688/problem/E 题解:设dp[s1][s2]表示s1状态下出现s2是否合理.那么s1显然可以更具01背包来得到状态.首 ...

  4. B. Tea Queue codeforces Round.37.div2 队列

    B. Tea Queue time limit per test 1 second memory limit per test 256 megabytes input standard input o ...

  5. 洛谷 P4206 [NOI2005]聪聪与可可 题解

    题面 输入 数据的第1行为两个整数N和E,以空格分隔,分别表示森林中的景点数和连接相邻景点的路的条数. 第2行包含两个整数C和M,以空格分隔,分别表示初始时聪聪和可可所在的景点的编号. 接下来E行,每 ...

  6. Postgresql-rman

    联机程序. 并且目标数据库必须处于归档模式. 支持在线全备, 增量备份, 归档备份 增量备份基于已经存在的一个全库备份 rman 本身使用pg_start_backup(), copy, pg_sto ...

  7. 剑指Offer(三十二):把数组排成最小的数

    剑指Offer(三十二):把数组排成最小的数 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/b ...

  8. Spring boot拦截器的实现

    Spring boot拦截器的实现 Spring boot自带HandlerInterceptor,可通过继承它来实现拦截功能,其的功能跟过滤器类似,但是提供更精细的的控制能力. 1.注册拦截器 @C ...

  9. python-re正则表达--持续更新

    | 模式          | 描述| |----              |----| | \w            | 匹配字母数字及下划线 | | \W           | 匹配非字母数 ...

  10. CentOS7 小技巧总结

    1.CentOS7 解决无法使用tab自动补全 原因:CentOS在最小化安装时,没有安装自动补全的包,需要手动安装. yum -y install bash-completion 安装好后,重新登陆 ...