针对上一篇博客的函数进行了封装优化,爬虫运行速度更快,界面更简洁!
这是主函数的优化
具体看上一篇博客内容
想直接要源码的下面时github地址拿走不谢
github
下面是爬虫的粗略工作流程:

import scrapy
import json
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
import os
import time
from scrapy_demo.douyu.douyu.items import DouyuItem# import  selenium.webdriver.remote.webelement.WebElementclass PicParseSpiderSpider(scrapy.Spider):name = 'pic_parse.spider'allowed_domains = ['www.douyu.com']start_urls = ["https://www.douyu.com/g_yz"]def __init__(self):self.driver = webdriver.Chrome(executable_path=r"D:\programs\chrome_driver\chromedriver.exe")def parse(self, response):self.driver.get(self.start_urls[0])# 得到总的页数pagepage = self.get_total_page()# 不断点击下一页并获得所有主播房间url存放到列表urls中urls = self.get_all_urls(page)# 在这里调节到底要爬取多少主播的相册# 根据url获取图片信息for url in urls:item = self.get_pic_item(url)time.sleep(1)yield item# 获取页数def get_total_page(self):"""获取所有页数"""try:element = WebDriverWait(self.driver, 5).until(EC.presence_of_element_located((By.XPATH,"/html/body/section/main/section[2]/div[2]/div/ul/li[last()-1]")))page = int(element.text)return pageexcept:print("获取页数失败")# 获得所有主播链接地址def get_all_urls(self,page):urls = []try:for i in range(page):time.sleep(1)li_lsit = self.driver.find_elements_by_xpath("/html/body/section/main/section[2]/div[2]/ul/li")test_num = 1for li in li_lsit:try:url = li.find_element_by_xpath("./div/a[1]").get_attribute("href")# print("第{}页的url:".format(i + 1) + url)# print("正在爬取第:{}页总共{}页主播房间的url".format((i+1),(page+1)))urls.append(url)# break# 爬取5个人的i = i + 1if i == 5:breakexcept:passelement = WebDriverWait(self.driver, 5).until(EC.presence_of_element_located((By.XPATH,"/html/body/section/main/section[2]/div[2]/div/ul/li[last()]")))return urls# 点击下一页element.click()time.sleep(1)# testbreakexcept:print("没有下一页了或者没有加载成功")# 进入链接后点击相册def click_photo_album(self,url):self.driver.get(url)# time.sleep(3)try:name_ele = WebDriverWait(self.driver, 5).until(EC.presence_of_element_located((By.XPATH,"/html/body/section/main/div[3]/div[1]/div[1]/div/div[2]/div[2]/div[1]/div[2]/div/h2")))except:print("获取名字超时")# name_ele = WebDriverWait(self.driver, 5).until(EC.presence_of_element_located#                                                    ((By.XPATH,#                                                      "/html/body/section/main/div[3]/div[1]/div[1]/div/div[2]/div[2]/div[1]/div[2]/div/h2")))name = name_ele.text# time.sleep(1)# element = self.driver.find_element_by_xpath("/html/body/div/div/div/div/div[1]/div/div/div/div[1]/a[4]")# 等待frame出现try:iframe_test = WebDriverWait(self.driver, 60).until(EC.presence_of_element_located((By.TAG_NAME,"iframe")))except:print("获取页面超时")# time.sleep(10)# iframe_test = self.driver.find_element_by_tag_name("iframe")# # iframe_test = self.driver.find_element_by_xpath("//iframe[title='test']")# print(iframe_test)# 切换页面并沉睡self.driver.switch_to.frame(iframe_test)time.sleep(1)# 相册按钮try:element = WebDriverWait(self.driver, 60).until(EC.presence_of_element_located((By.XPATH,"/html/body/div/div/div/div/div[1]/div/div/div/div[1]/a[4]")))except:print("获取相册按钮超时")# element = self.driver.find_element_by_xpath("/html/body/div/div/div/div/div[1]/div/div/div/div[1]/a[4]")# self.driver.switch_to.default_content()# print(element.text)element.click()return nametime.sleep(1)#点击更多图片加载进来def click_more(self):try:more_pic = self.driver.find_element_by_xpath("/html/body/div/div/div/div/div[2]/div/div/div")while more_pic:print(more_pic.text)time.sleep(0.5)more_pic.click()time.sleep(1)more_pic = self.driver.find_element_by_xpath("/html/body/div/div/div/div/div[2]/div/div/div")time.sleep(1)except:pass# 下载所有图片def get_all_pic(self,name):src_list = []# try:#     pic_urls = WebDriverWait(self.driver, 10).until(EC.presence_of_element_located#                                                     ((By.XPATH,#                                                       "/html/body/div/div/div/div/div[2]/div/a")))#     print("可以获取图片url", pic_urls)#     if pic_urls is not None:#         for pic in pic_urls:#             # print("图片详情页")#             # print(type(pic))#             time.sleep(3)#             img_url = pic.find_element_by_xpath("./img")#             print("获取单个图片:", img_url)## except:#     print("获取图片按钮超时")try:# print("进入获取图片链接")pic_urls = self.driver.find_elements_by_xpath("/html/body/div/div/div/div/div[2]/div/a")time.sleep(1)if pic_urls is not None:for pic in pic_urls:# print("图片详情页")# print(type(pic))img_url = pic.find_element_by_xpath("./img")# time.sleep(2)src = img_url.get_attribute("src")src = src.split("?")[0]print("正在爬取主播:{} 的图片:{}".format(name, src))src_list.append(src)except:passitem = DouyuItem(image_urls=src_list, name=name)print("主播{}的相册爬取完成!!!!".format(name))# print(item)return itemdef get_pic_item(self,url):try:# 点击页面的相册按钮name = self.click_photo_album(url)# 点击更多按钮让图片都加载出来self.click_more()# 得到图片信息并返回item = self.get_all_pic(name)return itemexcept:print("该房间进不去!!!!!")

斗鱼爬取主播相册爬虫函数封装相关推荐

  1. python爬取主播信息

    之前学过python的爬虫技术,现在回顾一下看看还会不会,果然有坑. 先爬取了微博评论网友的id 代码如下 import requests url = 'https://m.weibo.cn/api/ ...

  2. python爬取cctalk视频_python爬虫urllib使用和进阶 | Python爬虫实战二

    python爬虫urllib使用和进阶 上节课已经介绍了爬虫的基本概念和基础内容,接下来就要开始内容的爬取了. 其实爬虫就是浏览器,只不过它是一个特殊的浏览器.爬取网页就是通过HTTP协议访问相应的网 ...

  3. python爬取豆瓣电影top250_Python爬虫 - scrapy - 爬取豆瓣电影TOP250

    0.前言 新接触爬虫,经过一段时间的实践,写了几个简单爬虫,爬取豆瓣电影的爬虫例子网上有很多,但都很简单,大部分只介绍了请求页面和解析部分,对于新手而言,我希望能够有一个比较全面的实例.所以找了很多实 ...

  4. python实现数据爬取——糗事百科爬虫项目

    python实现数据爬取--糗事百科爬虫项目 # urllib.request 请求模块 import urllib.request # re 模块使 Python 语言拥有全部的正则表达式功能. i ...

  5. python 爬虫爬取疫情数据,爬虫思路和技术你全都有哈(一)

    python 爬虫爬取疫情数据,爬虫思路和技术你全都有哈(二.数据清洗及存储) 爬起疫情数据,有两个网址: 1.百度:链接 2.丁香园疫情:链接 在这两个中,丁香园的爬虫相对简单一点,所以今天就展示一 ...

  6. yelp纽约地区数据爬取。使用feapder爬虫框架

    yelp纽约地区数据爬取.使用feapder爬虫框架 本文使用了国内作者的一款feapder轻量级开源爬虫框架.进行yelp站点数据抓取. 第一部分为根据开放api获取店铺信息. 第二部分为根据商店i ...

  7. python 爬虫爬取疫情数据,爬虫思路和技术你全都有哈(二)

    上一章: python 爬虫爬取疫情数据,爬虫思路和技术你全都有哈(一.爬虫思路及代码) 第三步:数据清洗 清洗数据很简单,就是数据太乱的话,就得花些时间,所以一定要有一个好的方法,才能避免在清洗数据 ...

  8. python 定时自动爬取_python实现scrapy爬虫每天定时抓取数据的示例代码

    1. 前言. 1.1. 需求背景. 每天抓取的是同一份商品的数据,用来做趋势分析. 要求每天都需要抓一份,也仅限抓取一份数据. 但是整个爬取数据的过程在时间上并不确定,受本地网络,代理速度,抓取数据量 ...

  9. python爬网易新闻_Python爬虫实战教程:爬取网易新闻;爬虫精选 高手技巧

    Python爬虫实战教程:爬取网易新闻:爬虫精选 高手技巧 发布时间:2020-02-21 17:42:43 前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有, ...

  10. 斗鱼的游戏主播能赚钱吗

    斗鱼的游戏主播有机会赚取收入.斗鱼是中国最大的游戏直播平台之一,吸引了大量的观众和粉丝.通过直播游戏内容,游戏主播可以通过以下几种方式获得收入: 广告和赞助:游戏主播可以与品牌合作,展示其产品或服务, ...

最新文章

  1. 如何自学python基础-零基础如何自学成为Python高手?我有几点干货
  2. live的domain服务
  3. 哈佛成功金句25则(看一遍,都会很有收获!)
  4. go连接mysql集群_什么是MySQL集群-Go语言中文社区
  5. 我是如何学习写一个操作系统(八):内存管理和段页机制
  6. 关于数据可视化入门,看这一篇够了
  7. leetcode124. 二叉树中的最大路径和
  8. 石油、黄金与美元的游戏
  9. 90 后程序员开发“AI 吵架神器”,专治女朋友各种不服!
  10. python数据模型_#PYTHON#数据模型 | 学步园
  11. iOS实现一个颜色渐变的弧形进度条
  12. datax 不识别字段过滤_初效空气过滤器种类
  13. Web业务性能优化技术总结
  14. 使用计时器setInterval实现倒计时
  15. c语言while的用法四种句型,有关while的几种用法
  16. 按键精灵定义全局变量_按键精灵全局环境变量
  17. 2022苹果ios个人开发中注册遇到的问题
  18. 领取1024节日勋章(程序员必看)
  19. 南京申瓯SOC1000-UC IPPBX为中小企业提供电话系统解决方案
  20. WinForm使用CefSharp,嵌入浏览器

热门文章

  1. PHP-thinkPHP快速入门
  2. 进程系列(三)-进程的基本用法(打开文件示列)
  3. Python 豆瓣TOP250 电影爬取
  4. java计算机毕业设计招聘管理系统源码+系统+mysql数据库+lw文档
  5. linux添加虚拟主机
  6. 深入理解操作系统实验——bomb lab(phase_4)
  7. 金融数据api接口记录
  8. 量化噪声的大小与什么成正比_量化噪声
  9. 义乌中学集训(没打的题慢慢补)
  10. bootstrap table