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

基本思路:

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

7a2ed7aa40df8edb479a3e1dac68e403.png

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

bd609a4a5291f494d0e89ec67f0a576a.png

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

4cd0f128d6130368fa001872f1110ac9.png

保存数据到csv:

cb342a401f7a2e2bb784412846c278c6.png

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

d782f9a6074a1ada5b7308f535c2124b.png

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

73aececda96633a5d2a6fdea0c2fd0bd.png

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

cb9165a9475b8e25371431b8b44a5b73.png

最终效果图:

beb784bd40c6c39e2aed374120e6705c.png

代码:

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()js

  • 0
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值