【爬虫小程序:爬取斗鱼所有房间信息】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(): #初始化 ...
随机推荐
- vmware上安装的ubuntu连接不上网络
解决方法如下: 1.右键点击ubuntu,选择“设置” 2.网络适配器设置为“仅主机模式”:与主机共享的专用网络.点击“确定”即可.
- HDU 1045 Fire Net 二分图建图
HDU 1045 题意: 在一个n*n地图中,有许多可以挡住子弹的墙,问最多可以放几个炮台,使得炮台不会相互损害.炮台会向四面发射子弹. 思路: 把行列分开做,先处理行,把同一行中相互联通的点缩成一个 ...
- SPOJ - GSS1-Can you answer these queries I 线段树维护区间连续和最大值
SPOJ - GSS1:https://vjudge.net/problem/SPOJ-GSS1 参考:http://www.cnblogs.com/shanyr/p/5710152.html?utm ...
- CodeForces-714B-Filya and Homework+思路
Filya and Homework 题意: 给定一串数字,任选一个数a,把若干个数加上a,把若干个数减去a,能否使得数列全部相同: 思路: 我开始就想找出平均数,以为只有和偶数的可以,结果wa在 1 ...
- 洛谷P1246编码问题-排列组合,分类讨论
编码问题 题意就是a,b,c.....ab.....编码,给你一个字符串,输出这是第几个: 这里可以用暴力枚举,但也可以用组合数学的高超知识: 既然这样我就说一下排列组合的方法,如果要弄一个 各位数字 ...
- CF1005C Summarize to the Power of Two 暴力 map
Summarize to the Power of Two time limit per test 3 seconds memory limit per test 256 megabytes inpu ...
- 牛客网 Wannafly挑战赛 A 找一找 思考题
链接:https://www.nowcoder.com/acm/contest/71/A来源:牛客网 题目描述 给定n个正整数,请找出其中有多少个数x满足:在这n个数中存在数y=kx,其中k为大于1的 ...
- Windows下安装youtube-dl(下载各大网站视频)
youtube-dl干什么用的? 惯例,看官方介绍: youtube-dl is a command-line program to download videos from YouTube.com ...
- Codeforce Round #574(Div.2)
...
- 作为Java开发人员不会饿死的5个理由
尽管已有20多年的历史,Java仍然是最广泛使用的编程语言之一.只需看看统计数据:根据2018年Stack Overflow开发人员调查,Java是世界上第三大最受欢迎的技术. TIOBE指数,这是一 ...