Python爬虫实战之bilibili

2024-01-06 13:36
文章标签 python 实战 爬虫 bilibili

本文主要是介绍Python爬虫实战之bilibili,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Python爬虫实战之bilibili

声明:以下内容均为我个人的理解,如果发现错误或者疑问可以联系我共同探讨

爬虫介绍

网站介绍

本次要爬取的网站为bilibili,它是国内知名的视频弹幕网站,这里有及时的动漫新番,活跃的ACG氛围,有创意的Up主。可以在这里找到许多欢乐。

编写爬虫的原因和用途

bilibili已经从原来的小破站变成了现在现象级的多元化的社区网站,本次爬取它的目的是以它作为一个典型,告诉大家遇到各类型验证码的一种思路。

其实这类网站有个最简单的办法,就是提前登陆手动获取到cookie,然后根据cookie去请求我们需要爬取的网站。个人目的的爬虫可以用这类方法,比较省编写代码的时间。但是公司中可能会遇到众多账户的爬虫需求,一个一个手动登录去获取cookie就比较麻烦了,这时候使用Selenium自动化去获取效率就高很多了。

Selenium

简介

正如他们官方的介绍Selenium automates browsers. That's it!,他是一个自动化的浏览器,可以模拟人的操作。

使用教程

推荐通过Selenium中文网学习,非常全面!

验证码分析

滑动验证码

哔哩哔哩从之前的验证码是滑动验证码,主要思路就是找到缺口确定缺口的坐标,然后通过Selenium操作滑动到指定位置就行。类似的还有阿里系的大部分网页,比如飞猪、淘宝、天猫等,不过阿里系的不是每次都需要验证,得根据实际情况操作。

这种就是找到最右边的位置信息,然后滑动即可

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这种需要先找到整个图片的位置,然后滑动先找到内容的轮廓在进行滑动,都是同一个思路演变的

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

看图填答案系列

包括东方财富网上交易、bigquant等等,这类比较简单。将其下载下来根据验证码的情况进行处理然后交给各大云服务商的ORC服务识别就可以,都有免费试用的额度,根据自己的需求和喜好选择,也可以多试几家进行对比。

百度、腾讯、阿里、有道智云

根据图片进行操作点击系列

目前多了很多这种验证码,这种的难度在于情况变化比较多,不仅限于汉字和数字,还有可能是图片等等,这时候自己想办法也能解决,但是策略一改变就比较麻烦,可以借助各类打码的平台,对内容进行识别,然后再根据内容去进行操作

易云打码、快识别网址、斐斐打码等等

bilibili登陆分析

bilibili的最新的验证码属于第三种,在点击登陆按钮就会出现一个验证码的框,我们需要将这个图片下载下来给打码平台去识别,获得坐标信息然后再用Selenium进行点击操作

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

​ bilibili验证码

编写代码

Selenium模拟登陆

import re
import time
import base64
import json
import requests
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.chrome.options import Optionsclass Bilibili(object):def __init__(self):chrome_options = Options()# 设置无窗口模式# chrome_options.add_argument('--headless')self.driver = webdriver.Chrome('./chromedriver', options=chrome_options)def login(self, username, password):# 开登陆页面self.driver.get("https://passport.bilibili.com/login")# 输入用户名和密码self.driver.find_element_by_id('login-username').send_keys(username)self.driver.find_element_by_id('login-passwd').send_keys(password)# 点击登陆按钮self.driver.find_element_by_class_name('btn-login').click()# 等待验证码出现# self.driver.implicitly_wait(10)time.sleep(5)# 获取图片所在属性img_style = self.driver.find_element_by_class_name('geetest_tip_img').get_attribute('style')# 通过正则表达式获得图片urlurl = re.findall('url\("(.*?)"\)', img_style)[0]# 通过requests发送请求得到图片response = requests.get(url).content# 将图片保存在本地with open('./captcha.png', 'wb') as f:f.write(response)# 通过打码平台进行打码识别result = self.captcha_recognition()# 识别成功if result != "":# 对识别到的坐标进行分组处理result_list = result.split('|')for result in result_list:x = result.split(',')[0]y = result.split(',')[1]# 根据坐标执行整个动作链ActionChains(self.driver).move_to_element_with_offset(img_style, int(x), int(y)).click().perform()# 点击确定按钮self.driver.find_element_by_class_name('geetest_commit').click()# 获得登陆后的cookiecookie = [item["name"] + "=" + item["value"] for item in self.driver.get_cookies()]self.driver.close()return cookiedef captcha_recognition(self):"""验证码识别"""username = 'username'password = 'password'with open('./captcha.png', 'rb') as f:base64_data = base64.b64encode(f.read())b64 = base64_data.decode()data = {"username": username, "password": password, "typeid": 27, "image": b64}result = json.loads(requests.post("http://api.ttshitu.com/predict", json=data).text)if result['success']:return result["data"]["result"]else:print(result["message"])return ""

这篇关于Python爬虫实战之bilibili的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/576511

相关文章

Python进行JSON和Excel文件转换处理指南

《Python进行JSON和Excel文件转换处理指南》在数据交换与系统集成中,JSON与Excel是两种极为常见的数据格式,本文将介绍如何使用Python实现将JSON转换为格式化的Excel文件,... 目录将 jsON 导入为格式化 Excel将 Excel 导出为结构化 JSON处理嵌套 JSON:

java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)

《java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)》:本文主要介绍java中pdf模版填充表单踩坑的相关资料,OpenPDF、iText、PDFBox是三... 目录准备Pdf模版方法1:itextpdf7填充表单(1)加入依赖(2)代码(3)遇到的问题方法2:pd

Python操作PDF文档的主流库使用指南

《Python操作PDF文档的主流库使用指南》PDF因其跨平台、格式固定的特性成为文档交换的标准,然而,由于其复杂的内部结构,程序化操作PDF一直是个挑战,本文主要为大家整理了Python操作PD... 目录一、 基础操作1.PyPDF2 (及其继任者 pypdf)2.PyMuPDF / fitz3.Fre

python设置环境变量路径实现过程

《python设置环境变量路径实现过程》本文介绍设置Python路径的多种方法:临时设置(Windows用`set`,Linux/macOS用`export`)、永久设置(系统属性或shell配置文件... 目录设置python路径的方法临时设置环境变量(适用于当前会话)永久设置环境变量(Windows系统

python中列表应用和扩展性实用详解

《python中列表应用和扩展性实用详解》文章介绍了Python列表的核心特性:有序数据集合,用[]定义,元素类型可不同,支持迭代、循环、切片,可执行增删改查、排序、推导式及嵌套操作,是常用的数据处理... 目录1、列表定义2、格式3、列表是可迭代对象4、列表的常见操作总结1、列表定义是处理一组有序项目的

python运用requests模拟浏览器发送请求过程

《python运用requests模拟浏览器发送请求过程》模拟浏览器请求可选用requests处理静态内容,selenium应对动态页面,playwright支持高级自动化,设置代理和超时参数,根据需... 目录使用requests库模拟浏览器请求使用selenium自动化浏览器操作使用playwright

python使用try函数详解

《python使用try函数详解》Pythontry语句用于异常处理,支持捕获特定/多种异常、else/final子句确保资源释放,结合with语句自动清理,可自定义异常及嵌套结构,灵活应对错误场景... 目录try 函数的基本语法捕获特定异常捕获多个异常使用 else 子句使用 finally 子句捕获所

Python极速搭建局域网文件共享服务器完整指南

《Python极速搭建局域网文件共享服务器完整指南》在办公室或家庭局域网中快速共享文件时,许多人会选择第三方工具或云存储服务,但这些方案往往存在隐私泄露风险或需要复杂配置,下面我们就来看看如何使用Py... 目录一、android基础版:HTTP文件共享的魔法命令1. 一行代码启动HTTP服务器2. 关键参

Python对接支付宝支付之使用AliPay实现的详细操作指南

《Python对接支付宝支付之使用AliPay实现的详细操作指南》支付宝没有提供PythonSDK,但是强大的github就有提供python-alipay-sdk,封装里很多复杂操作,使用这个我们就... 目录一、引言二、准备工作2.1 支付宝开放平台入驻与应用创建2.2 密钥生成与配置2.3 安装ali

Python获取浏览器Cookies的四种方式小结

《Python获取浏览器Cookies的四种方式小结》在进行Web应用程序测试和开发时,获取浏览器Cookies是一项重要任务,本文我们介绍四种用Python获取浏览器Cookies的方式,具有一定的... 目录什么是 Cookie?1.使用Selenium库获取浏览器Cookies2.使用浏览器开发者工具