python爬虫之dou鱼信息获取(json格式写入数据)

116 阅读1分钟

最近在学习csv格式和json写入格式的不同,数据来源于某个直播网站。 此文章只用于研究学习请勿用作商业用途,本作者对使用的后果不承担责任,侵删。

from selenium import webdriver
import json
import time


class DouyuSpider(object):
    def __init__(self):
        self.http_url = "https://www.douyu.com/directory/all"
        pass

    def parse_http_url(self):
        # 获取浏览器对象
        driver = webdriver.Chrome()
        # 访问网址
        driver.get(self.http_url)
        # 窗口最大化
        driver.maximize_window()
        # 等待网页加载
        time.sleep(1)
        # 滚动条
        driver.execute_script('window.scrollTo(300,1000)')
        time.sleep(2)
        # 获得li元素
        li_list = driver.find_elements_by_xpath(
            '//div[@class="layout-Module-container layout-Cover ListContent"]/ul[@class="layout-Cover-list"]/li')
        # 信息
        douyu_data = []
        for li in li_list:
            item = {}
            # 标题
            title = li.find_element_by_xpath('.//h3[@class="DyListCover-intro"]').text
            item["标题"] = title
            # 分类标签
            category_tag = li.find_element_by_xpath('.//span[@class="DyListCover-zone"]').text
            item["分类"] = category_tag
            # 主播名字
            name = li.find_element_by_xpath('.//div[@class="DyListCover-userName"]').text
            item["主播名"] = name
            # 热度
            popularity = li.find_element_by_xpath('.//span[@class="DyListCover-hot"]').text
            item["热度"] = popularity
            # 直播间地址
            href = li.find_element_by_xpath('.//a[@class="DyListCover-wrap"]').get_attribute("href")
            item["直播间地址"] = href
            
            douyu_data.append(item)
            # 提示
            print(f"{name}的信息已经爬取完毕...")
        # 自动关闭
        driver.quit()
        return douyu_data

    def sava_jsondata_by_douyu(self, json_data):
        with open("2-16斗鱼直播信息.json", "w", encoding="utf-8") as f:
            json.dump(json_data, f, indent=2, ensure_ascii=False)
        print("数据保存成功")

    def run(self):
        json_data = self.parse_http_url()
        self.sava_jsondata_by_douyu(json_data)

if __name__ == '__main__':
    spider = DouyuSpider()
    spider.run()