Python3+Selenium3+openpyxl 爬取网站信息并保存到excel

Python3+Selenium3+openpyxl 爬取网站信息并保存到excel

前言

提示:以下是本人小白自行研究的成果,仅供参考

一、openpyxl安装

cmd 输入 pip3 install openpyxl

pip3 install openpyxl

这个可能慢点,也可以使用豆瓣源或者清华大学源下载

# 豆瓣
pip3 install openpyxl -i https://pypi.douban.com/simple
# 清华大学
pip3 install openpyxl -i https://pypi.tuna.tsinghua.edu.cn/simple

看到Successfully就表示成功了
在这里插入图片描述

二、读取2021年最火歌曲并保存到excel

#!/usr/bin/env python 
# -*- coding:utf-8 -*-
import time
import re
from selenium import webdriver
from openpyxl import Workbook
from openpyxl.utils import get_column_letter

'''
读取2021年最火歌曲,并保存到excel
'''

num0 = 1
num1 = 1
maxlen1 = 1
maxlen2 = 1

workbook = Workbook()
sheetsh = workbook.active

sheetsh.title = '2021最火歌曲'
sheetsh.cell(row=1, column=1).value = '排名'
sheetsh.cell(row=1, column=2).value = '链接'
sheetsh.cell(row=1, column=3).value = '歌名'

url = 'https://www.9ku.com/music/t_hits.htm'

def getHtml():
    # 打开谷歌浏览器
    driver = webdriver.Chrome()
    # 打开热搜歌曲网站
    driver.get(url)
    # driver.get("https://www.baidu.com/")
    time.sleep(3)
    js = 'window.scrollBy(0,3000)'
    # 调用js方法
    driver.execute_script(js)
    js = 'window.scrollBy(0,5000)'
    driver.execute_script(js)
    # 获取整个页面的元素信息
    html = driver.page_source
    return html


col_width = [0] * 3
def parseHotBook(html):
    # 这里有跨行,但我用\n一直处理不了就分开写了
    # 大致解说:()里面的是会自动匹配计入结果,反之则只匹配不计入结果;
    # .*?:匹配所有字符串(非贪婪模式);
    # r'':表示字符串是非转义的原始字符串,需编译器忽略转义字符
    reg_rank = re.compile(r'<span class="songNum.*?">(.*?).</span>')
    reg_name = re.compile(r'<a target="_1" href="(.*?)" class="songName.*?">(.*?)</a>')
    result_rank = re.findall(reg_rank, html)
    result_name = re.findall(reg_name, html)

    # global 全局变量
    global num0, num1, maxlen1, maxlen2

    for info in result_rank:
        num0 = num0 + 1
        sheetsh.cell(row=num0, column=1).value = info
        if maxlen1 < len(info):
            maxlen1 = len(info)
            col_width[0] = maxlen1 + 4

    for info in result_name:
        num1 = num1 + 1
        sheetsh.cell(row=num1, column=2).value = 'https://www.9ku.com' + info[0]
        sheetsh.cell(row=num1, column=3).value = info[1]
        if maxlen1 < len(info[0]) + 19:
            maxlen1 = len(info[0]) + 19
            col_width[1] = maxlen1 + 4

        if maxlen2 < len(info[1]):
            maxlen2 = len(info[1])
            # 一个汉字对应两个字节,所以这个*2+4是我预留的空间
            col_width[2] = maxlen2 * 2 + 4

    # 设置自适应列宽
    for col in sheetsh.columns:
        # 获取列序号
        index = list(sheetsh.columns).index(col)
        # 获取列字母
        letter = get_column_letter(index + 1)
        print(col_width[index])
        # 设置列宽
        sheetsh.column_dimensions[letter].width = col_width[index]

	# 如果不写路径则默认保存在项目路径下
    workbook.save('E://2021最火歌曲.xlsx')
    print('爬取成功!!!')

if __name__=='__main__':
    html = getHtml()
    parseHotBook(html)

解说:
上文用的是 re.findall(),表示匹配所有的字符串并返回列表,为空则返回空列表
另外re.match()re.search()
match 只匹配字符串的起始位置的,如不匹配则返回none
search 扫描整个字符串并返回第一个成功的匹配
re.compile() 函数
compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。使用方式参考上面代码。

关于这几个函数以及正则表达式有不懂的,看这个 https://www.runoob.com/python/python-reg-expressions.html超完整哦

总结

小白学习,不足之处欢迎指出,共同探讨

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值