【爬虫小程序:爬取斗鱼所有房间信息】Xpath
# 本程序亲测有效,用于理解爬虫相关的基础知识,不足之处希望大家批评指正
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的更多相关文章
- 【爬虫小程序:爬取斗鱼所有房间信息】Xpath(协程池版)
# 本程序亲测有效,用于理解爬虫相关的基础知识,不足之处希望大家批评指正 from gevent import monkey monkey.patch_all() from gevent.pool i ...
- 【爬虫小程序:爬取斗鱼所有房间信息】Xpath(线程池版)
# 本程序亲测有效,用于理解爬虫相关的基础知识,不足之处希望大家批评指正 from queue import Queue import requests from lxml import etree ...
- 【爬虫小程序:爬取斗鱼所有房间信息】Xpath(多线程版)
# 本程序亲测有效,用于理解爬虫相关的基础知识,不足之处希望大家批评指正 from queue import Queue import requests from lxml import etree ...
- 【爬虫小程序:爬取斗鱼所有房间信息】Xpath(多进程版)
# 本程序亲测有效,用于理解爬虫相关的基础知识,不足之处希望大家批评指正 import requests from lxml import etree from multiprocessing imp ...
- 基于webmagic的爬虫小应用--爬取知乎用户信息
听到“爬虫”,是不是第一时间想到Python/php ? 多少想玩爬虫的Java学习者就因为语言不通而止步.Java是真的不能做爬虫吗? 当然不是. 只不过python的3行代码能解决的问题,而Jav ...
- [python爬虫] Selenium定向爬取PubMed生物医学摘要信息
本文主要是自己的在线代码笔记.在生物医学本体Ontology构建过程中,我使用Selenium定向爬取生物医学PubMed数据库的内容. PubMed是一个免费的搜寻引擎,提供生物医学方 ...
- python爬虫实战之爬取智联职位信息和博客文章信息
1.python爬取招聘信息 简单爬取智联招聘职位信息 # !/usr/bin/env python # -*-coding:utf-8-*- """ @Author ...
- Python爬虫基础--分布式爬取贝壳网房屋信息(Client)
1. client_code01 2. client_code02 3. 这个时候运行多个client就可以分布式进行数据爬取.
- selenium,webdriver爬取斗鱼主播信息 实操
from selenium import webdriver import time from bs4 import BeautifulSoup class douyuSelenium(): #初始化 ...
随机推荐
- 前端H5与安卓和ios之间通信
在一些app场景中,经常看到app里面嵌套H5页面, 安卓和ios提供一个空壳子,方法两者互相调用.上一周就是写H5页面让安卓和ios调用使用,中间传参,接受参数.通过 window.wx 对象调用一 ...
- 用户数从 0 到亿,我的 K8s 踩坑血泪史
作者 | 平名 阿里服务端开发技术专家 导读:容器服务 Kubernetes 是目前炙手可热的云原生基础设施,作者过去一年上线了一个用户数极速增长的应用:该应用一个月内日活用户从零至四千万,用户数从零 ...
- vmware12中安装MAC OS X 10.10
1. 准备工作 1) VMware Workstation 12 (去vmware官网下载即可) 2) unlocker 203 (OS X 插件补丁) 链接:http://pan.bai ...
- ABC133F - Colorful Tree
ABC133FColorful Tree 题意 给定一颗边有颜色和权值的树,多次询问,每次询问,首先更改颜色为x的边的权值为y,然后输出u到v的距离. 数据都是1e5量级的. 思路 我自己一开始用树链 ...
- CodeForces 988 F Rain and Umbrellas
Rain and Umbrellas 题意:某同学从x=0的点走到x=a的点,路上有几段路程是下雨的, 如果他需要经过这几段下雨的路程, 需要手上有伞, 每一把伞有一个重量, 求走到重点重量×路程的最 ...
- [Swoole入门到进阶] [精选公开课] Swoole服务器-Server的四层生命周期
PHP 完整生命周期 执行PHP文件 PHP扩展模块初始化(MINIT) PHP扩展请求初始化(RINIT) 执行 PHP 逻辑 PHP扩展请求结束(RSHUTDOWN) PHP脚本清理 PHP扩展模 ...
- Js、layui获取单选框radio的几种方法
首先,编写HTML如下: <form id="form1"> <table border="0"> ...
- SpringBoot应用启动过程分析
真的好奇害死猫!之前写过几个SpringBoot应用,但是一直没搞明白应用到底是怎么启动的,心里一直有点膈应.好吧,趁有空去看了下源码,写下这篇博客作为学习记录吧! 个人拙见,若哪里有理解不对的地方, ...
- 更改mac电脑图片默认存储位置
1.创建存储位置screenshot 2.打开terminal 3.defaults write com.apple.screencapture location ~/Desktop/screensh ...
- 分布式之分布式事务、分布式锁、接口幂等性、分布式session
一.分布式session session 是啥?浏览器有个 cookie,在一段时间内这个 cookie 都存在,然后每次发请求过来都带上一个特殊的 jsessionid cookie,就根据这个东西 ...