基本思路:

首先用开发者工具找到需要提取数据的标签列

python爬虫利用selenium实现自动翻页爬取某鱼数据的思路详解

利用xpath定位需要提取数据的列表

python爬虫利用selenium实现自动翻页爬取某鱼数据的思路详解

然后再逐个提取相应的数据:

python爬虫利用selenium实现自动翻页爬取某鱼数据的思路详解

保存数据到csv:

python爬虫利用selenium实现自动翻页爬取某鱼数据的思路详解

利用开发者工具找到下一页按钮所在标签:

python爬虫利用selenium实现自动翻页爬取某鱼数据的思路详解

利用xpath提取此标签对象并返回:

python爬虫利用selenium实现自动翻页爬取某鱼数据的思路详解

调用点击事件,并循环上述过程:

python爬虫利用selenium实现自动翻页爬取某鱼数据的思路详解

最终效果图:

python爬虫利用selenium实现自动翻页爬取某鱼数据的思路详解

代码:

from selenium import webdriver
import time
import re

class Douyu(object):

  def __init__(self):
    # 开始时的url
    self.start_url = "https://www.douyu.com/directory/all"
    # 实例化一个Chrome对象
    self.driver = webdriver.Chrome()
    # 用来写csv文件的标题
    self.start_csv = True

  def __del__(self):
    self.driver.quit()

  def get_content(self):
    # 先让程序两秒,保证页面所有内容都可以加载出来
    time.sleep(2)
    item = {}
    # 获取进入下一页的标签
    next_page = self.driver.find_element_by_xpath("//span[text()='下一页']/..")
    # 获取用于判断是否是最后一页的属性
    is_next_url = next_page.get_attribute("aria-disabled")
    # 获取存储信息的所有li标签的列表
    li_list = self.driver.find_elements_by_xpath("//ul[@class='layout-Cover-list']//li")
    
    # 提取需要的数据
    for li in li_list:
      
      item["user-id"] = li.find_element_by_xpath(".//div[@class='DyListCover-userName']").text
      item["img"] = li.find_element_by_xpath(".//div[@class='DyListCover-imgWrap']//img").get_attribute("src")
      item['class-name'] = li.find_element_by_xpath(".//span[@class='DyListCover-zone']").text
      item["click-hot"] = li.find_element_by_xpath(".//span[@class='DyListCover-hot']").text
      item["click-hot"] = re.sub(r'\n','',item['click-hot'])
      
      # 保存数据
      self.save_csv(item)
    
    # 返回是否有下一页和下一页的点击事件的标签,
    return next_page,is_next_url

  def save_csv(self,item):
    # 将提取存放到csv文件中的内容连接为csv格式文件
    str = ','.join([i for i in item.values()])

    with open('./douyu.csv','a',encoding='utf-8') as f:
      if self.start_csv:
        f.write("用户id,image,所属类,点击热度\n")
        self.start_csv = False
      # 将字符串写入csv文件
      f.write(str)
      f.write('\n')
    print("save success")

  def run(self):
    # 启动chrome并定位到相应页面
    self.driver.get(self.start_url)

    while True:
      # 开始提取数据,并获取下一页的元素
      next_page,is_next = self.get_content()
      if is_next!='false':
        break
      # 点击下一页
      next_page.click()

if __name__=='__main__':
  douyu_spider = Douyu()
  douyu_spider.run()
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!

《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线

暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。

艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。

《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。