【爬虫小程序:爬取斗鱼所有房间信息】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(): #初始化 ...
随机推荐
- GitExtensions使用教程
GitExtensions工具使用教程 第一步:安装 1.双击:GitExtensions24703SetupComplete.msi <ignore_js_op> image001.pn ...
- 转载-Springboot整合ehcache缓存
转载:https://www.cnblogs.com/xzmiyx/p/9897623.html EhCache是一个比较成熟的Java缓存框架,最早从hibernate发展而来, 是进程中的缓存系统 ...
- NLP(九) 文本相似度问题
多个维度判别文本之间相似度 情感维度 Sentiment/Emotion 感官维度 Sense 特定词的出现 词频 TF 逆文本频率 IDF 构建N个M维向量,N是文档总数,M是所有文档的去重词汇量 ...
- 写一手好SQL很有必要
MySQL性能 最大数据量 最大并发数 查询耗时0.5秒 实施原则 数据表设计 数据类型 避免空值 text类型 索引优化 索引分类 优化原则 SQL优化 分批处理 不做列运算 避免Select * ...
- 【强联通图 | 强联通分量】HDU 1269 迷宫城堡 【Kosaraju或Tarjan算法】
为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个房间(N<=10000)和M条通道(M<=100000),每个通道都是单向的,就是说若称某通道连通了A房间和B房间,只说明 ...
- codeforces 864 E. Fire(背包+思维)
题目链接:http://codeforces.com/contest/864/problem/E 题解:这题一看就很像背包但是这有3维限制也就是说背包取得先后也会对结果有影响.所以可以考虑sort来降 ...
- POJ1833 排列 调用全排列函数 用copy函数节省时间 即使用了ios同步代码scanf还是比较快
排列 Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 21268 Accepted: 8049 Description 题 ...
- 深入浅出TypeScript(4)- 使用接口和类型别名
在TypeScript中,为了可以约束对象定义,提供了两个新的特性,接口和类型别名. TypeScript中的接口 在强类型语言中,都有接口的概念,那么TypeScript中的接口是如何使用的呢? 接 ...
- 洛谷 P1666 前缀单词 题解
题意:给n个单词,如果单词a为单词b的前缀则a,b不能共存,问能共存的集合数(包括空集) 一道dp题,排序后判断,f[i][j]表示i和j是否能共存,f[i][j]=1表示能共存,初始化dp[i]=1 ...
- CSS特效集锦:视觉魔法的碰撞与融合(二)
引言 长久以来,我认识到.CSS,是存在极限的.正如曾经替你扛下一切的那个男人,也总有他眼含热泪地拼上一切,却也无法帮你做到的事情,他只能困窘地让你看到他的无能为力,怅然若失. 然后和曾经他成长的时代 ...