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

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()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值