Python_Crawler_Urllib库_bilibili搜索

简介: Python_Crawler_Urllib库_bilibili搜索

环境介绍:

pycharm:图片下方附有下载链接

python:图片下方附有下载链接

image.png

Download PyCharm: Python IDE for Professional Developers by JetBrains

python:图片下方附有下载链接


image.png

Python Releases for Windows | Python.org

依赖库:配置完pycharm后,安装所需的库

image.png

爬虫源码

初步框架

from bs4 import BeautifulSoup
import re
import urllib.request,urllib.error
import xlwt
import time
def main():
    baseurl = "https://search.bilibili.com/video?keyword=%E9%9D%9E%E8%AF%9A%E5%8B%BF%E6%89%B0&page="
    datalist = getData(baseurl)
    savepath = ".\\非诚勿扰.xls"
    saveData(datalist,savepath)
#正则查找规则
findUrl = re.compile(r'<a class="img-anchor" href="(.*?)[?]from')
findImgSrc = re.compile(r'<a .*? title="(.*?)"',re.S)
findRB = re.compile(r'<span class="so-imgTag_rb">(.*?)</span>')
findUpName = re.compile(r'<a class="up-name".*?>(.*?)</a>')
findSoIconTime = re.compile(r'<i class="icon-date"></i>(.*?)</span>',re.S)
findWatchNum = re.compile(r'<i class="icon-playtime"></i>(.*?)</span>',re.S)
def getData(baseurl):
    datalist = []
    for i in range(1,51):
        url = baseurl + str(i)
        html = askURL(url)
        time.sleep(0.5)
        #解析
        soup = BeautifulSoup(html,"html.parser")
        for item in soup.find_all('li',class_='video-item matrix'):        
            data = []       #保存一个视频的所有信息
            item = str(item)
            Url = re.findall(findUrl,item)[0]
            pint = 'https:'
            data.append(pint+Url)
            ImgSrc = re.findall(findImgSrc,item)[0]
            data.append(ImgSrc)
            RB = re.findall(findRB,item)[0]
            data.append(RB)
            UpName = re.findall(findUpName,item)[0]
            data.append(UpName)
            SoIc = re.findall(findSoIconTime,item)[0].replace("\n","")
            data.append(SoIc.strip())
            Watch = re.findall(findWatchNum,item)[0].replace("\n","")
            data.append(Watch.strip())
            datalist.append(data)
    return datalist
def askURL(url):
    head = {
        "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36"
            }
        #用户代理
    request = urllib.request.Request(url,headers=head)
    html = ""
    try:
        response = urllib.request.urlopen(request)
        html = response.read().decode("utf-8")
    except urllib.error.URLError as e:
        if hasattr(e,"code"):
            print(e.code)
        if hasattr(e,"reason"):
            print(e.reason)
    return html
def saveData(datalist,savepath):
    book = xlwt.Workbook(encoding="utf-8",style_compression=0)
    sheet = book.add_sheet('非诚勿扰b站视频',cell_overwrite_ok=True)
    col = ("视频链接","标题","视频时长","up主","发布时间","播放次数")
    for i in range (0,6):
        sheet.write(0,i,col[i])
    for i in range(0,1000):
        print("第%d条" %(i+1))
        data = datalist[i]
        for j in range(0,6):
            sheet.write(i+1,j,data[j])
    book.save(savepath)
if __name__ == '__main__':
    main()
    print("完成!")
相关文章
|
13天前
|
调度 开发者 Python
Python中的异步编程:理解asyncio库
在Python的世界里,异步编程是一种高效处理I/O密集型任务的方法。本文将深入探讨Python的asyncio库,它是实现异步编程的核心。我们将从asyncio的基本概念出发,逐步解析事件循环、协程、任务和期货的概念,并通过实例展示如何使用asyncio来编写异步代码。不同于传统的同步编程,异步编程能够让程序在等待I/O操作完成时释放资源去处理其他任务,从而提高程序的整体效率和响应速度。
|
16天前
|
数据采集 存储 数据挖掘
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第27天】在数据分析领域,Python的Pandas库因其强大的数据处理能力而备受青睐。本文介绍了Pandas在数据导入、清洗、转换、聚合、时间序列分析和数据合并等方面的高效技巧,帮助数据分析师快速处理复杂数据集,提高工作效率。
45 0
|
8天前
|
Python
二分查找变种大赏!Python 中那些让你效率翻倍的搜索绝技!
二分查找是一种高效的搜索算法,适用于有序数组。其基本原理是通过不断比较中间元素来缩小搜索范围,从而快速找到目标值。常见的变种包括查找第一个等于目标值的元素、最后一个等于目标值的元素、第一个大于等于目标值的元素等。这些变种在实际应用中能够显著提高搜索效率,适用于各种复杂场景。
27 9
|
9天前
|
算法 数据处理 开发者
超越传统:Python二分查找的变种策略,让搜索效率再上新台阶!
本文介绍了二分查找及其几种Python实现的变种策略,包括经典二分查找、查找第一个等于给定值的元素、查找最后一个等于给定值的元素以及旋转有序数组的搜索。通过调整搜索条件和边界处理,这些变种策略能够适应更复杂的搜索场景,提升搜索效率和应用灵活性。
24 5
|
9天前
|
数据库 Python
异步编程不再难!Python asyncio库实战,让你的代码流畅如丝!
在编程中,随着应用复杂度的提升,对并发和异步处理的需求日益增长。Python的asyncio库通过async和await关键字,简化了异步编程,使其变得流畅高效。本文将通过实战示例,介绍异步编程的基本概念、如何使用asyncio编写异步代码以及处理多个异步任务的方法,帮助你掌握异步编程技巧,提高代码性能。
26 4
|
9天前
|
API 数据处理 Python
探秘Python并发新世界:asyncio库,让你的代码并发更优雅!
在Python编程中,随着网络应用和数据处理需求的增长,并发编程变得愈发重要。asyncio库作为Python 3.4及以上版本的标准库,以其简洁的API和强大的异步编程能力,成为提升性能和优化资源利用的关键工具。本文介绍了asyncio的基本概念、异步函数的定义与使用、并发控制和资源管理等核心功能,通过具体示例展示了如何高效地编写并发代码。
20 2
|
15天前
|
数据采集 JSON 测试技术
Python爬虫神器requests库的使用
在现代编程中,网络请求是必不可少的部分。本文详细介绍 Python 的 requests 库,一个功能强大且易用的 HTTP 请求库。内容涵盖安装、基本功能(如发送 GET 和 POST 请求、设置请求头、处理响应)、高级功能(如会话管理和文件上传)以及实际应用场景。通过本文,你将全面掌握 requests 库的使用方法。🚀🌟
36 7
|
1月前
|
网络协议 数据库连接 Python
python知识点100篇系列(17)-替换requests的python库httpx
【10月更文挑战第4天】Requests 是基于 Python 开发的 HTTP 库,使用简单,功能强大。然而,随着 Python 3.6 的发布,出现了 Requests 的替代品 —— httpx。httpx 继承了 Requests 的所有特性,并增加了对异步请求的支持,支持 HTTP/1.1 和 HTTP/2,能够发送同步和异步请求,适用于 WSGI 和 ASGI 应用。安装使用 httpx 需要 Python 3.6 及以上版本,异步请求则需要 Python 3.8 及以上。httpx 提供了 Client 和 AsyncClient,分别用于优化同步和异步请求的性能。
python知识点100篇系列(17)-替换requests的python库httpx
|
15天前
|
机器学习/深度学习 数据采集 算法
Python机器学习:Scikit-learn库的高效使用技巧
【10月更文挑战第28天】Scikit-learn 是 Python 中最受欢迎的机器学习库之一,以其简洁的 API、丰富的算法和良好的文档支持而受到开发者喜爱。本文介绍了 Scikit-learn 的高效使用技巧,包括数据预处理(如使用 Pipeline 和 ColumnTransformer)、模型选择与评估(如交叉验证和 GridSearchCV)以及模型持久化(如使用 joblib)。通过这些技巧,你可以在机器学习项目中事半功倍。
21 3
|
18天前
|
数据采集 数据可视化 数据处理
如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`)
本文介绍了如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`),加载历史数据,计算均线和其他技术指标,实现交易逻辑,记录和可视化交易结果。示例代码展示了如何根据均线交叉和价格条件进行开仓、止损和止盈操作。实际应用时需注意数据质量、交易成本和风险管理。
39 5