使用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()
一定要记得关闭浏览器,如果只是单纯的叉掉浏览器,浏览器还会在后台继续运行,消耗资源。
使用os模块自动创建文件夹,当文件夹存在时会报错。当需要创建文件夹的时候,先判断该路径下是否存在该文件夹,不存在时再创建。
import os
if not os.path.exists('文件夹路径'):
os.mkdir('文件夹路径')
注意:selenium中,浏览器对象(b)默认指向一开始打开的选项卡,除非代码切换,否则浏览器对象指向的选项卡不会变。
切换浏览器选项卡的步骤如下:
1)获取当前浏览器上所有的窗口(选项卡):浏览器.window_handles
2)切换选项卡
3)解析内容
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()