爬虫案例1:selenium获取某知部分数据

selenium获取网页数据

      • 1 selenium
      • 2 创建文件夹
      • 3 切换选项卡
      • 4 示例代码

1 selenium

使用slenium的步骤如下:
1、创建浏览器对象(浏览器对象如果是全局,浏览器不会自动关闭)
2、打开网页
3、获取网页源代码(获取到的一定是页面中加载出来的)
4、关闭浏览器

from selenium.webdriver import Chrome
# 1.
b = Chrome()
# 2.
b.get(url)
# 3.
print(b.page_source)
# 4.
b.close()

一定要记得关闭浏览器,如果只是单纯的叉掉浏览器,浏览器还会在后台继续运行,消耗资源。

2 创建文件夹

使用os模块自动创建文件夹,当文件夹存在时会报错。当需要创建文件夹的时候,先判断该路径下是否存在该文件夹,不存在时再创建。

import os

if not os.path.exists('文件夹路径'):
	os.mkdir('文件夹路径')

3 切换选项卡

注意:selenium中,浏览器对象(b)默认指向一开始打开的选项卡,除非代码切换,否则浏览器对象指向的选项卡不会变。

切换浏览器选项卡的步骤如下:

1)获取当前浏览器上所有的窗口(选项卡):浏览器.window_handles

2)切换选项卡

3)解析内容

4 示例代码

from selenium.webdriver import Chrome
from time import sleep
from bs4 import BeautifulSoup
import csv

# 获取详细信息函数
def paper_info():
    # 获取所有列表
    global author
    all_result = b.find_elements_by_css_selector('.result-table-list .name>a')

    # 计算列表长度
    for i in range(len(all_result)):
        all_result[i].click()
        sleep(2)

        # 切换选项卡
        b.switch_to.window(b.window_handles[-1])
        # 解析内容
        soup = BeautifulSoup(b.page_source, 'lxml')
        title = soup.select_one('.wx-tit>h1').text.replace(' ', '').replace('\n', '')
        author1 = soup.select_one('.wx-tit>.author a')

        summary1 = soup.select_one('#ChDivSummary')
        # 判断是否为空
        if (not author1) or (not summary1):
            author = '无'
            summary = '无'
        else:
            author = author1.text
            summary = summary1.text.strip()

        #将数据组合
        lw_data.append([title, author, summary])
        b.close()
        # 切换选项卡
        b.switch_to.window(b.window_handles[0])

# 获取多少页的数据函数
def serval_page(num: int):
    for i in range(num):
        paper_info()

        if i != num - 1:
            btn = b.find_element_by_id('PageNext')
            btn.click()
            sleep(2)
        else:
            break


if __name__ == '__main__':
    # 创建浏览器
    b = Chrome()

    b.get('https://www.cnki.net/')
    search_tag = b.find_element_by_id('txt_SearchText')
    search_tag.send_keys('数据分析\n')
    sleep(2)

    lw_data = []
    serval_page(2)

    with open('某网数据分析.csv', 'w', encoding='utf-8', newline='') as f:
        write = csv.writer(f)
        write.writerows(lw_data)

    input('是否结束:')
    b.close()

你可能感兴趣的:(爬虫,Python,selenium,python,chrome)