使用xpath,线程池爬取斗鱼主播信息:

主要爬取主播昵称,直播内容分类,房间名称,房间号以及人气,共爬取了大概110多页数据,大概15000条,保存在txt文本中,

import timefrom selenium import webdriver
from  multiprocessing.dummy import Pool #导入线程池
from lxml import etreeclass DouYuSpider(object):def __init__(self):self.url = "https://www.douyu.com/directory/all"#创建一个Chrome浏览器对象self.driver = webdriver.Chrome()# 进行计数self.count = 0#创建线程池 默认最大5个self.pool=Pool()# 解析数据def parse_data(self, data):# 1.转类型element = etree.HTML(data)# 2.解析# 主播昵称nick_name_list = element.xpath('//*[@id="listAll"]/section[2]/div[2]/ul/li/div/a[1]/div[2]/div[2]/h2/text()')# 直播所属分类category_list = element.xpath('//*[@id="listAll"]/section[2]/div[2]/ul/li/div/a[1]/div[2]/div[1]/span/text()')# print(category_list)# 主播房间名称room_name_list = element.xpath('//div[@class="DyListCover-info"]/h3/text()')# 主播房间号room_id_list = element.xpath('//*[@id="listAll"]/section[2]/div[2]/ul/li/div/a[2]/@href')# 主播人气hot_list = element.xpath('//*[@id="listAll"]/section[2]/div[2]/ul/li/div/a[1]/div[2]/div[2]/span/text()')li = []for nick_name, category, room_name, room_id, hot in zip(nick_name_list, category_list, room_name_list,room_id_list, hot_list):s = '主播名:' + nick_name.strip() + "  " + '直播内容:' + category.strip() + "  " + '房间名称:' + room_name.strip() + "  " + '房间号:' + room_id.strip() + "  " + '人气:' + hot.strip() + "\n"self.count += 1li.append(s)return li# 保存数据def write_file(self, data):with open('douyu03.txt', 'a') as f:for s in data:f.write(s)def execute_request_save(self):# 1.获取下一页的class属性的值# 最后的下一页的父级li标签中的 aria-disabled=true# 而开始的下一页的 aria-disabled=falseres = self.driver.find_element_by_xpath('//span[text()="下一页"]/..').get_attribute('aria-disabled')if res == 'false':# 1.1点击下一页按钮 进行翻页next = self.driver.find_element_by_xpath('//span[text()="下一页"]')time.sleep(1)next.click()# 1.2js代码 滚动到最后位置time.sleep(1.5)code_js = 'window.scrollTo(0,document.body.scrollHeight)'self.driver.execute_script(code_js)# 2.获取数据data = self.driver.page_source# 3.解析数据result_list = self.parse_data(data)# 4.保存数据self.write_file(result_list)def _callback(self, temp):#apply_async是异步非阻塞的self.pool.apply_async(self.execute_request_save, callback=self._callback)# 调度def run(self):#开始时间self.start_time=time.time()# 1.请求self.driver.get(self.url)# 2.获取数据data = self.driver.page_source# 3.解析数据result_list = self.parse_data(data)# 4.保存数据self.write_file(result_list)# 循环发送请求 获取所有页面的数据#多线程 实现异步任务for i in range(5):self.pool.apply_async(self.execute_request_save,callback=self._callback)#阻塞主线程  python3中主线程结束,子线程不结束。while True:#防止cpu空转time.sleep(0.001)if self.driver.find_element_by_xpath('//span[text()="下一页"]/..').get_attribute('aria-disabled')=='true':break# 关闭浏览器self.driver.quit()print('总共{}条数据'.format(self.count))#结束时间self.end_time = time.time()print('运行程序总共花了{}s'.format(self.end_time-self.start_time))if __name__ == '__main__':DouYuSpider().run()

使用selenium,xpath,线程池爬取斗鱼主播信息相关推荐

  1. 使用requests、BeautifulSoup、线程池爬取艺龙酒店信息并保存到Excel中

    import requests import time, random, csv from fake_useragent import UserAgent from bs4 import Beauti ...

  2. 利用xpath爬取斗鱼主播热度和房间标题

    import requests import pandas as pd from bs4 import BeautifulSoup import os import time import rando ...

  3. python爬取斗鱼主播图片

    今天闲来无事,爬取一下斗鱼女主播的图片,之前学习scrapy的时候写过一个找不到了,今天使用requests和bs4重新写了一份,闲话不多说,直奔主题. 首先用Chrome浏览器访问斗鱼官网: 当然是 ...

  4. python爬取斗鱼主播图片_F_hawk189_新浪博客

    今天闲来无事,爬取一下斗鱼女主播的图片,之前学习scrapy的时候写过一个找不到了,今天使用requests和bs4重新写了一份,闲话不多说,直奔主题. 首先用Chrome浏览器访问斗鱼官网: 当然是 ...

  5. 基于requests模块的cookie,session和线程池爬取

    基于requests模块的cookie,session和线程池爬取 有些时候,我们在使用爬虫程序去爬取一些用户相关信息的数据(爬取张三"人人网"个人主页数据)时,如果使用之前req ...

  6. Python爬虫——使用线程池爬取同程旅行景点数据并做数据可视化

    大家好!我是霖hero 正所谓:有朋自远方来,不亦乐乎?有朋友来找我们玩,是一件很快乐的事情,那么我们要尽地主之谊,好好带朋友去玩耍!那么问题来了,什么时候去哪里玩最好呢,哪里玩的地方最多呢? 今天将 ...

  7. 【python爬虫学习记录 持续更新】多线程多进程,带线程池爬取实例

    文章目录 简介 多线程codingFrame 多进程codingFrame 线程池与进程池 线程池爬取实例(主页url隐了 主要看思路 和如何使用线程池框架) 简介 进程是资源单位 线程是执行单位 每 ...

  8. Python 爬虫 之 Selenium 模拟打开操作浏览器爬取斗鱼全部视播相关信息,并json保存信息

    Python 爬虫 之 Selenium 模拟打开操作浏览器爬取斗鱼全部视播相关信息,并json保存信息 基础: Python 爬虫 之 Selenium.webdriver 的安装,以及模拟打开操作 ...

  9. 【每日爬虫】:利用线程池爬取2万张装修效果图

    文章目录 一.前言 二.需求 三.技术路线 四.线程池爬取2万张装修效果图 五.其他 一.前言 2020-04-08日爬虫练习 每日一个爬虫小练习,学习爬虫的记得关注哦! 学习编程就像学习骑自行车一样 ...

最新文章

  1. Our Proof : Page Scraping : Website Data Extraction : Data Mining Analytics : Connotate.com
  2. 按键中断异步通知实现
  3. 致远OA任意文件下载漏洞(CNVD-2020-62422)
  4. java地图点线面_openlayers之点,线,面(以城市,河流,省份为例,分别对应点线面)...
  5. P2567 [SCOI2010]幸运数字
  6. ABAP中创建动态内表的三种方法(转载)
  7. 马超计算机博士,湖南大学设计院马超民等博士生团队发明“手势”控制汽车
  8. 华为云用什么吸引 150 万开发者?
  9. mysql迁移数据目录,这个坑你遇到过吗?
  10. 解析Excel_Poi
  11. 分布式爬虫搭建系列 之二-----神器PyCharm的安装
  12. 手机变速齿轮_变速齿轮手机版下载|变速齿轮游戏加速器官方最新版v1.2下载 _当游网...
  13. python sorted怎么排序_Python sorted排序方法怎么用
  14. excel各种填充的总结
  15. Android 索引的实现
  16. 关于switchport Port-security 使用遇到的一些问题
  17. python给矩阵赋值_python – 基本Numpy数组值赋值
  18. 6S管理的导入怎么做才能行之有效?
  19. 2000-2019年省级农业绿色全要素生产率原始测算数据和结果数据
  20. win2K3安装sql2000提示“安装程序配置服务器失败”的常见解决办法

热门文章

  1. iOS系统版本特性(7版本--14版本)
  2. Java 对印章进行抠图
  3. 【FPGA教程案例36】通信案例6——基于vivado核的FFT傅里叶变换开发以及verilog输入时序配置详解,通过matlab进行辅助验证
  4. Qt远程升级-实现设备升级
  5. 苹果内购IAP流程(转载)
  6. Android开发工具---SQLiteManager插件
  7. 互联网快讯:科大讯飞回应裁员传闻;极米Z6X Pro、极米H3S出色音画获好评;中国海油正式成立新能源分公司
  8. Web3流量聚合平台Starfish OS,给玩家元宇宙新范式体验
  9. ns3入门(1)——第一个案例first.cc
  10. git的基本使用流程演示