什么?你看百度文库还在付费?我用python实现了百度文库免费,
2023-07-11 本文已影响0人
天天玩python
前言
前几天在找一些资料想用来参考一下,然后找是找到了,结果需要vip才可以下载!什么?要花钱?那不是大冤种了?
对于这种非必要的内容,作为白嫖党主打的就是分币不刷就是陪伴,于是乎.........我直接用python直接实现了免费版,如果你能跟我一样,那么. .简直泰裤辣!!!
具体实现如下,有两个版本,简单版和难度版
1.我们先看看简单版的代码,具体代码如下:
#!/usr/bin/python3
# -*- coding: utf-8 -*-
'''
@Time :2023/7/8 16:04
@Author :美女
@DESC :
'''
import requests
import os
from lxml import etree
# 创建目录方法
def create_file(file_path):
if not os.path.exists(file_path):
os.makedirs(file_path)
url = 'https://wk.baidu.com/view/526297e64531b90d6c85ec3a87c24028905f8521'
resp = requests.get(url)
# print(resp.text)
text = resp.text
html = etree.HTML(text)
img_list = html.xpath('//div[@class="mod flow-ppt-mod"]/div/div/img')
# 计数
cnt = 1
# 文件保存路径
file_path = './wendang/'
create_file(file_path)
# 获取图片
for i in img_list:
try:
img_url = i.xpath('./@src')[0]
except:
img_url = i.xpath('./@data-src')[0]
# 文件名称
file_name = f'{file_path}page_{cnt}.jpg'
print(file_name, img_url)
# 下载保存图片
resp = requests.get(img_url)
with open(file_name, 'wb') as f:
f.write(resp.content)
cnt += 1
只有区区50行代码,拿到源码后,切记要:在python环境下运行和pycharm工具
2.复杂难度版本,具体代码如下:
import os.path
import time
from selenium import webdriver
import requests
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select
url = input('输入想要下载的百度文库地址:') # 输入自己需要爬取的PPT地址
# 第一部分:手机模式打开一个电脑浏览器
options = webdriver.ChromeOptions() # 配置chrome启动时属性的类
mobile_emulation = {"deviceName": "iPhone 13"} # 手机模式打开浏览器,手机类型:iPhone 6
options.add_experimental_option("mobileEmulation", mobile_emulation) # 将mobile_emulation 添加到options中,这样浏览器就是通过手机模式打开
web = webdriver.Chrome()# 路径修改为自己电脑浏览器驱动路径
web.get(url)
time.sleep(2)
# 第二部分:将所有隐藏的ppt图片展示出来
def click_ele(click_xpath):
# 单击指定控件
click_ele = web.find_elements(By.XPATH, click_xpath)
if click_ele:
click_ele[0].location_once_scrolled_into_view # 滚动到控件位置
web.execute_script('arguments[0].click()', click_ele[0]) # 单击控件,即使控件被遮挡,同样可以单击
# 点击继续阅读
xpath_continue_read_button = "//div[@class='foldpagewg-icon']" # 获取继续阅读得到xpath
click_ele(xpath_continue_read_button) # 调用click_ele()
xpath_next_content_button = "//div[@class='btn-wrap']/div[@class='btn-cancel']" # 获取下一页的xpath
click_ele(xpath_next_content_button) # 调用click_ele()
click_count = 0
while True:
# 如果到了最后一页就跳出循环
if web.find_elements(By.XPATH,
"//div[@class='pagerwg-loadSucc hide']") or web.find_elements(By.XPATH,
"//div[@class='pagerwg-button' and @style='display: none;']"):
break
# 点击加载更多
xpath_loading_more_button = "//span[@class='pagerwg-arrow-lower']"
click_ele(xpath_loading_more_button)
click_count += 1
print("第{}次点击加载更多!".format(click_count))
# 等待一秒,等浏览器加载
time.sleep(2)
click_ele('//*[@id="wui-messagebox-cancel-1"]')
time.sleep(1)
# 图片元素的定位及获取
li_list = web.find_elements(By.NAME, 'retype-page')
img_url = []
for i in li_list:
h2 = i.find_element(By.mro(), 'pic')
time.sleep(3)
h3 = h2.find_element(By.LINK_TEXT, 'img')
time.sleep(1)
img = h3.get_attribute('src')
img_url.append(img)
# 创建文件夹进行保存
path = 'D://百度文库PPT//爬虫ppt图片' # 看自己心情,将爬取的PPT图片放在哪里,比如:D://百度文库PPT//爬虫ppt图片
if not os.path.exists(path): # 查找是否有存储的文件夹,没有则创建一个
os.makedirs(path)
# 解析图片url,并保存到已创建的文件夹中
x = 1
for g in range(len(img_url)):
r = requests.get(img_url[g])
path = '*://*//*//爬虫ppt图片//%d.jpg' % x
print('正在爬取' + img)
with open(path, "wb") as f:
f.write(r.content)
time.sleep(2)
f.close()
print('爬取成功')
x += 1
这一次代码稍微多了20多行,拿到源码python环境和pycharm工具缺一不可,而这一次还需要安装Google插件,需要改谷歌环境变量。具体如何不会的小伙伴可以讨论!!!