斗鱼爬取主播相册爬虫函数封装
针对上一篇博客的函数进行了封装优化,爬虫运行速度更快,界面更简洁!
这是主函数的优化
具体看上一篇博客内容
想直接要源码的下面时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("该房间进不去!!!!!")
斗鱼爬取主播相册爬虫函数封装相关推荐
- python爬取主播信息
之前学过python的爬虫技术,现在回顾一下看看还会不会,果然有坑. 先爬取了微博评论网友的id 代码如下 import requests url = 'https://m.weibo.cn/api/ ...
- python爬取cctalk视频_python爬虫urllib使用和进阶 | Python爬虫实战二
python爬虫urllib使用和进阶 上节课已经介绍了爬虫的基本概念和基础内容,接下来就要开始内容的爬取了. 其实爬虫就是浏览器,只不过它是一个特殊的浏览器.爬取网页就是通过HTTP协议访问相应的网 ...
- python爬取豆瓣电影top250_Python爬虫 - scrapy - 爬取豆瓣电影TOP250
0.前言 新接触爬虫,经过一段时间的实践,写了几个简单爬虫,爬取豆瓣电影的爬虫例子网上有很多,但都很简单,大部分只介绍了请求页面和解析部分,对于新手而言,我希望能够有一个比较全面的实例.所以找了很多实 ...
- python实现数据爬取——糗事百科爬虫项目
python实现数据爬取--糗事百科爬虫项目 # urllib.request 请求模块 import urllib.request # re 模块使 Python 语言拥有全部的正则表达式功能. i ...
- python 爬虫爬取疫情数据,爬虫思路和技术你全都有哈(一)
python 爬虫爬取疫情数据,爬虫思路和技术你全都有哈(二.数据清洗及存储) 爬起疫情数据,有两个网址: 1.百度:链接 2.丁香园疫情:链接 在这两个中,丁香园的爬虫相对简单一点,所以今天就展示一 ...
- yelp纽约地区数据爬取。使用feapder爬虫框架
yelp纽约地区数据爬取.使用feapder爬虫框架 本文使用了国内作者的一款feapder轻量级开源爬虫框架.进行yelp站点数据抓取. 第一部分为根据开放api获取店铺信息. 第二部分为根据商店i ...
- python 爬虫爬取疫情数据,爬虫思路和技术你全都有哈(二)
上一章: python 爬虫爬取疫情数据,爬虫思路和技术你全都有哈(一.爬虫思路及代码) 第三步:数据清洗 清洗数据很简单,就是数据太乱的话,就得花些时间,所以一定要有一个好的方法,才能避免在清洗数据 ...
- python 定时自动爬取_python实现scrapy爬虫每天定时抓取数据的示例代码
1. 前言. 1.1. 需求背景. 每天抓取的是同一份商品的数据,用来做趋势分析. 要求每天都需要抓一份,也仅限抓取一份数据. 但是整个爬取数据的过程在时间上并不确定,受本地网络,代理速度,抓取数据量 ...
- python爬网易新闻_Python爬虫实战教程:爬取网易新闻;爬虫精选 高手技巧
Python爬虫实战教程:爬取网易新闻:爬虫精选 高手技巧 发布时间:2020-02-21 17:42:43 前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有, ...
- 斗鱼的游戏主播能赚钱吗
斗鱼的游戏主播有机会赚取收入.斗鱼是中国最大的游戏直播平台之一,吸引了大量的观众和粉丝.通过直播游戏内容,游戏主播可以通过以下几种方式获得收入: 广告和赞助:游戏主播可以与品牌合作,展示其产品或服务, ...
最新文章
- 如何自学python基础-零基础如何自学成为Python高手?我有几点干货
- live的domain服务
- 哈佛成功金句25则(看一遍,都会很有收获!)
- go连接mysql集群_什么是MySQL集群-Go语言中文社区
- 我是如何学习写一个操作系统(八):内存管理和段页机制
- 关于数据可视化入门,看这一篇够了
- leetcode124. 二叉树中的最大路径和
- 石油、黄金与美元的游戏
- 90 后程序员开发“AI 吵架神器”,专治女朋友各种不服!
- python数据模型_#PYTHON#数据模型 | 学步园
- iOS实现一个颜色渐变的弧形进度条
- datax 不识别字段过滤_初效空气过滤器种类
- Web业务性能优化技术总结
- 使用计时器setInterval实现倒计时
- c语言while的用法四种句型,有关while的几种用法
- 按键精灵定义全局变量_按键精灵全局环境变量
- 2022苹果ios个人开发中注册遇到的问题
- 领取1024节日勋章(程序员必看)
- 南京申瓯SOC1000-UC IPPBX为中小企业提供电话系统解决方案
- WinForm使用CefSharp,嵌入浏览器