selenium库

1. 安装

首先安装库,pip就行

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple selenium

然后安装浏览器驱动,博主我使用的是Chrome,首先查看自己的Chrome浏览器版本,地址栏输入

chrome://version/


然后到:http://chromedriver.storage.googleapis.com/index.html
下载对应版本的驱动,大版本对上就行,比如博主我的大版本是76.x.xxxx.xxx,下载最新的

下载后解压只有一个chromedriver.exe文件,把它放到Chrome的文件夹中


然后配置环境变量,在桌面鼠标右击我的电脑>>属性>>高级系统设置>>环境变量>>编辑path>>把刚刚的Chrome文件路径添加进去,准备工作完成

2. 爬取斗鱼直播页面信息

最近学的东西颇杂,做笔记太烦了,直接写项目

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By

import json


def browser():
    """设置无头浏览器,使爬取时不用打开浏览器"""
    chrome_options = Options()
    chrome_options.add_argument('--headless')
    browser = webdriver.Chrome(options=chrome_options)
    return browser


def get_data_list(browser, url):
    """
    获取页面所有直播间信息,返回列表
    :return:
    """
    browser.get(url)
    wait = WebDriverWait(browser, 10)
    wait.until(EC.presence_of_all_elements_located((By.CLASS_NAME, 'ListFooter')))
    data_list = browser.find_elements_by_xpath('//*[@id="listAll"]/section[2]/div[2]/ul/li')
    return len(data_list)


def generator_data(browser):
    """子生成器,取出文本内容"""
    while True:
        i = yield
        if i is None:
            break
        print('正在爬取第{}条数据'.format(i))
        title = catch(browser, i, 'div/a/div[2]/div/h3')
        category = catch(browser, i, 'div/a/div[2]/div[1]/span')
        owner = catch(browser, i, 'div/a[1]/div[2]/div[2]/h2')
        hots = catch(browser, i, 'div/a/div[2]/div[2]/span')
        data = {
            'title': title,
            'category': category,
            'owner': owner,
            'hots': hots
        }
        # print(data)
        return data


def write(browser):
    """委派生成器,从子生成器取出内容,然后写入文件"""
    while True:
        # next(get_data_list())
        data = yield from generator_data(browser)
        json_data = json.dumps(data, ensure_ascii=False) + ',\n'
        with open('douyuSpider.json', 'a+', encoding='utf-8') as f:
            print('正在写入', json_data)
            f.write(json_data)


def catch(browser, n, path):
    """抓取内容"""
    data = browser.find_element_by_xpath('//*[@id="listAll"]/section[2]/div[2]/ul/li[{}]/{}'.format(n, path))
    return data.text


if __name__ == '__main__':
    url = 'https://www.douyu.com/directory/all'
    browser = browser()
    num = get_data_list(browser, url)
    w = write(browser)
    next(w)  # 激活生成器
    for i in range(num):
        w.send(i+1)

这里博主我是为了顺便复习生成器的知识,就没按正常套路来写代码

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容