教你用 Python 爬取 Baidu 文库全格式文档

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

考虑到现在大部分小伙伴使用 Python 主要因为爬虫,那么为了更好地帮助大家巩固爬虫知识,加深对爬虫的理解,选择了爬取百度文库作为我们的目标。

教你用 Python 爬取 Baidu 文库全格式文档

 

废话不多说,我们开始。

TXT、DOCX 爬取与保存

教你用 Python 爬取 Baidu 文库全格式文档

 

在爬取任何东西之前,我们都要先确认需要爬取的数据是不是异步加载的;如果是异步加载的直接爬取网页是爬不到的。

要知道是不是异步加载其实很简单,就用requests 对网页发起请求,看看 response 是什么就可以了

url = 'https://wenku.baidu.com/view/4e29e5a730126edb6f1aff00bed5b9f3f90f72e7.html?rec_flag=default'
header = {'User-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'}
res = requests.get(url , headers = header)
res.text

教你用 Python 爬取 Baidu 文库全格式文档

 

很明显,返回的东西,并不是我们所需要的内容; 根据常理来说,我们就可以认为该网页是异步加载的。

但是,从常识来讲,如果网页的内容是异步加载的,那么直接通过百度搜索,是搜索不到网页内部的内容的,但是很显然,我们每次通过百度搜索都是可以直接找到文库中的文本内容的。

如下:

教你用 Python 爬取 Baidu 文库全格式文档

 

那么这就有意思了,明明直接发起请求是获取不到网页内容的,但是为什么通过百度搜索就可以找到呢? 关键肯定在于百度搜索 上面。

这个时候通过查阅资料,我们了解到,最主要的问题出在我们的 headers

在爬取网页时,headers 通常是作为身份证,让网页不看出我们是爬虫;如果不加 headers,网页直接就会看出我们是爬虫,就会拒绝访问

 

 

再深入了解一下 headers 的识别机理,我们发现了叫做 Robot 协议的东西。

它规定了什么样的 headers 可以访问网页内部内容,除了指定 headers 之外的 headers,都是无法请求页面内容的。

比如说百度文库的 Robot 协议就是下面这样的:

User-agent: Baiduspider

Disallow: /w?

Disallow: /search?

Disallow: /submit

Disallow: /upload

Disallow: /cashier/   

而我们需要爬取的内容 url 格式为

https://wenku.baidu.com/view/?.html

这代表 Baiduspider 应该可以爬取文库内容;大致猜测这是因为百度搜索时需要根据文本内容匹配搜索选项,所以放行。

因此我们尝试伪装 UA 为 Baiduspider

url = 'https://wenku.baidu.com/view/4e29e5a730126edb6f1aff00bed5b9f3f90f72e7.html?rec_flag=default'
header = {'User-agent': 'Googlebot'}
res = requests.get(url , headers = header)
res.text

果然不出所料,我们成功地获取到了目标内容

教你用 Python 爬取 Baidu 文库全格式文档

 

既然已经成功获取到了网页的正确源代码,那么下一步就是去解析网页获取内容。

解析网页源代码的库有很多,这里我们使用 BeautifulSoup

plist = []
soup = BeautifulSoup(r, "html.parser")
plist.append(soup.title.string)
for div in soup.find_all('div', attrs={"class": "bd doc-reader"}):
    plist.extend(div.get_text().split('\n'))
plist = [c.replace(' ', '') for c in plist]
plist = [c.replace('\\x0c', '') for c in plist]
plist

整个解析是非常容易的,都是很标准的操作。

在这里就不多加叙述了,最终的效果如下:

教你用 Python 爬取 Baidu 文库全格式文档

 

当然爬取到东西了只是万里长征的第一步,就这样是肯定不行的,我们还需要将爬取的内容保存起来,通常是保存为 txt 文件

file = open('test.txt', 'w',encoding='utf-8')
for str in plist:
    file.write(str)
    file.write('\n')
file.close()

教你用 Python 爬取 Baidu 文库全格式文档

 

但是为了美观起见,我们在这里选择使用 python-docx 库将内容保存为 docx 文件

with open('test.txt', encoding='utf-8') as f:
    docu = Document()
    docu.add_paragraph(f.read())
    docu.save('test.docx')

教你用 Python 爬取 Baidu 文库全格式文档

 

PPT、PDF 爬取与保存

教你用 Python 爬取 Baidu 文库全格式文档

 

有了之前的经验教训,在爬取的时候我们首先就尝试了使用爬取 TXT、DOCX 的方法,尝试是否可以爬到内容

url = 'https://wenku.baidu.com/view/a4ac1b57dd88d0d232d46a0f.html?fr=search'
header = {'User-agent': 'Googlebot'}
res = requests.get(url , headers = header)
res.text

很可惜的是,我们并没有访问到

原因仔细想想也很简单,在百度搜索的时候,直接搜索是搜不到 PPT 或者 PDF 的内容的

教你用 Python 爬取 Baidu 文库全格式文档

 

那么很显然,PPT 和 PDF 是通过异步的方法进行内容加载的

对待异步加载的数据,我们通常采取的策略有两种

1、第一个就是直接找到发起异步请求的接口,自己构造请求头,发起请求

2、第二个就是通过 Selenium 这样的自动化测试工具去爬取

教你用 Python 爬取 Baidu 文库全格式文档

 

百度文库的接口太难找了,请求头的构造也很麻烦,找了很久也没有很满意。

所以在本次爬取中,我们使用的是第二种方法,使用 Selenium 这样的自动化测试工具

教你用 Python 爬取 Baidu 文库全格式文档

 

这里我们需要下载 ChromeDriver 这个插件,当然这里是默认大家使用的是 Chrome 浏览器,如果是其他的浏览器,firefox,safari 等等,直接去网上找到相应 Driver 就可以了。

这里给出 ChromeDriver 的下载地址

http://npm.taobao.org/mirrors/chromedriver/

大家一定要下载和自己 Chrome 浏览器版本一致的 ChromeDriver,不然程序是运行会报错

教你用 Python 爬取 Baidu 文库全格式文档

 

我们先不急着马上开始爬取,我们先来尝试使用一下Selenium调用ChromeDriver

import requests
from selenium import webdriver
url = 'https://wenku.baidu.com/view/5292b2bc0166f5335a8102d276a20029bd64638c.html?fr=search'
driver = webdriver.Chrome(r'F:\driver\chromedriver.exe')
driver.get(url)

怎么样,是不是浏览器自动打开了? 现在我们尝试输出这个 driver,就可以看见,网页的正确源代码已经在里面了

现在我们仔细研究一下源代码就可以看到,我们需要的内容在下面这个位置

教你用 Python 爬取 Baidu 文库全格式文档

 

现在正确的源代码也有了,内容的位置也知道了,直接解析,爬取,完事就好了。

教你用 Python 爬取 Baidu 文库全格式文档

 

想得美,经过这样的爬取之后,对内容进行解析,让我们看看究竟爬到没有

教你用 Python 爬取 Baidu 文库全格式文档

 

from lxml import etree
import re
html=etree.HTML(driver.page_source)
links=html.xpath("//div[@class='reader-pic-item']/@style")
part = re.compile(r'url[(](.*?)[)]')
qa="".join(links)
z=part.findall(qa)
z

教你用 Python 爬取 Baidu 文库全格式文档

 

我们可以知道,其实我们只爬到 3 张 PDF,其他的都没有爬到。

这是为什么呢?

这是百度文库为了防止大家去爬,专门设置的一个小机关

教你用 Python 爬取 Baidu 文库全格式文档

 

返回百度文库,我们仔细看看源代码,其实我们可以发现,随着页面的变化,源代码是不断改变的,每次都只有 3 张图片的 url。

并且这个页码数也有一定的规律,如果在第二页,那么图片就是 1,2,3,如果在第三页,图片就是 2,3,4

教你用 Python 爬取 Baidu 文库全格式文档

 

那么我们的疑惑一下就解决了,只需要不断地进行换页的爬取,就可以了

接下来就是如何实现换页的操作了

这个需要两个步骤,先是点击继续阅读,然后进行页面输入实现换页。

先实现点击的操作,代码如下:

button = driver.find_element_by_xpath("//*[@id='html-reader-go-more']/div[2]/div[1]/span")
button.click()
driver.execute_script("arguments[0].click();", button)

整个操作是通过 JS 来进行的,大家可以把这个记住,以后需要点击的时候直接用就可以

然后就是输入页面实现换页,这个其实涉及的比较多,细分的话,步骤分为获取总页数,依次输入页面并点击。

import re
# 寻找页面
source = re.compile(r'<span class="page-count">/(.*?)</span>')
number = int(source.findall(driver.page_source)[0])
# 输入页面并点击
driver.find_element_by_class_name("page-input").clear()
driver.find_element_by_class_name("page-input").send_keys('2')
driver.find_element_by_class_name("page-input").send_keys(Keys.ENTER)

如果小伙伴成功实现了上面的操作,其实大体的爬取工作已经差不多了,接下来就是保存我们的 PPT 和 PDF了

教你用 Python 爬取 Baidu 文库全格式文档

 

因为爬取 PDF 和 PPT 的时候,我们是爬取的图片的源地址,那么我们要获得这张图片并保存下来就必须对这个地址发起请求,然后将返回头以二进制保存下来。

for m in range(3):
    pic = requests.get(z[m]).content
    # 方法一
#     file = open(f'./照片/{m+1}.jpg','wb')
#     file.write(pic)
#     file.close()
    # 方法二
    with open(f'./照片/{m+1}.jpg','wb') as f:
        f.write(pic)
        f.close()

在这里,提醒大家一下一定要按照对图片用正确顺序进行命名,因为后面保存为 PDF 的时候,需要排序

在 py 文件的目录下,大家就可以看见保存下来的图片了

最后一步,将图片保存为 PDF

from PIL import Image
import os
folderPath = "F:/TEST"
filename = "test"
files = os.listdir(folderPath)
jpgFiles = []
sources = []
for file in files:
    if 'jpg' in file:
        jpgFiles.append(file)
tep = []
for i in jpgFiles:
    ex = i.split('.')
    tep.append(int(ex[0]))
tep.sort()
jpgFiles=[folderPath +'/'+ str(i) + '.jpg' for i in tep]
output = Image.open(jpgFiles[0])
jpgFiles.pop(0)
for file in jpgFiles:
   img = Image.open(file)
   img = img.convert("P")
   sources.append(img)
output.save(f"./{filename}.pdf","PDF",save_all=True,append_images=sources)

最终的结果就是生成了咱们的 PDF 文件

教你用 Python 爬取 Baidu 文库全格式文档

 

上述的操作看起来很多,很麻烦,其实并不是的,因为大部分的操作都是固定的,大家只需要记熟就可以了。

简单的 GUI 制作

教你用 Python 爬取 Baidu 文库全格式文档

 

GUI 这块,我们整了点新活儿,用 C# 编写 winform 简易的 GUI,调用爬虫的 Py thon 代码

教你用 Python 爬取 Baidu 文库全格式文档

 

C# 调用 python 项目的方式我简单用 Process 类执行,通过执行 python.exe 执行代码

public static void RunPythonScript(string sArgName, string py, string args = "", params string[] teps)
{
    Process p = new Process();

    //(没放debug下,写绝对路径)
    //string path = @"C:\Users\zll\Desktop\baidu\CSharpCallPython\bin\Debug\" + sArgName;
    // 获得python文件的绝对路径(将文件放在c#的debug文件夹中可以这样操作)
    string path = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase + sArgName;

    //没有配环境变量的话,可以像我这样写python.exe的绝对路径。如果配了,直接写"python.exe"即可
    //p.StartInfo.FileName = @"C:\Users\zll\AppData\Local\Programs\Python\Python37-32\python.exe";
    p.StartInfo.FileName = @py;
    string sArguments = path;

    foreach (string sigstr in teps)
    {
        sArguments += " " + sigstr;//传递参数
    }

    sArguments += " " + args;

    p.StartInfo.Arguments = sArguments;
    p.StartInfo.UseShellExecute = false;
    p.StartInfo.RedirectStandardOutput = true;
    p.StartInfo.RedirectStandardInput = true;
    p.StartInfo.RedirectStandardError = true;
    p.StartInfo.CreateNoWindow = true;

    p.Start();
    p.BeginOutputReadLine();
    p.OutputDataReceived += new DataReceivedEventHandler(p_OutputDataReceived);
    Console.ReadLine();
    p.WaitForExit();
}

对输入 的内容进行简单判断,如果不是百度文库地址或不是 python.exe 地址,报错

if (!url.Contains("https://wenku.baidu.com/view/"))
{
    MessageBox.Show("请输入正确的百度文库网址!");
    lbl_state.Text = "请重新输入。";
}
else if (!py.Contains("python.exe"))
{
    MessageBox.Show("请输入正确的python.exe路径!");
    lbl_state.Text = "请重新输入。";
}
else
{
    //输入参数列表
    String[] strArr = new String[] { url, istxt };
    string sArguments = @"src\wenku.py";//这里是python的文件名字
    RunPythonScript(sArguments, py, "-u", strArr);
    if(result.Contains("0"))
        lbl_state.Text = "对不起,爬取失败。";
    else if (result.Contains("1"))
        lbl_state.Text = "爬取成功!";
}

因为 GUI 部分比较简单,这里就不过多描述了。

python爬虫爬取百度文档 打开爬取到的图片内容为想要的文档,后续可通过图片转文字获取详情文档。1.获取文档内容,百度文库文档大多是图片形式。这里面就有所需的所有图片内容。浏览器中搜索找到图片的来源。2.导入数据模块请求数据。3.将图片文件爬取下来。 阅读详情

相关推荐

教你用 Python 爬取 Baidu 文库格式文档

考虑到现在大部分小伙伴使用 Python 主要因为爬虫,那么为了更好地帮助大家巩固爬虫知识,加深对爬虫的理解,选择了爬取百度文库作为我们的目标。 废话不多说,我们开始。 TXT、DOCX 爬取与保存 在爬取任何东西之前,我们都要先确认需要爬取的数据是不是异步加载的;如果是异步加载的直接爬取网页是爬不到的。 要知道是不是异步加载其实很简单,就用requests 对网页发起请求,看看 response 是什么就可以了 url = 'https://wenku.baidu.com/view/4

爬遍所有网站 3612

10分钟教你用Python爬取Baidu文库格式内容

返回百度文库,我们仔细看看源代码,其实我们可以发现,随着页面的变化,源代码是不断改变的,每次都只有3张图片的url。并且这个页码数也有一定的规律,如果在第二页,那么图片就是1,2,3,如果在第三页,图片就是2,3,4。但是,从常识来讲,如果网页的内容是异步加载的,那么直接通过百度搜索,是搜索不到网页内部的内容的,但是很显然,我们每次通过百度搜索都是可以直接找到文库中的文本内容的。对待异步加载的数据,我们通常采取的策略有两种,第一个就是直接找到发起异步请求的接口,自己构造请求头,发起请求,第二个就是通过。

xiaolinyui的博客 3989

10分钟教你用Python爬取Baidu文库格式内容(1)

它规定了什么样的headers可以访问网页内部内容,除了指定headers之外的headers,都是无法请求页面内容的。(更详细的Robot协议介绍以附件形式给出)比如说百度文库的Robot协议就是下面这样的。而我们需要爬取的内容url格式为.html这代表Baiduspider应该可以爬取文库内容。大致猜测这是因为百度搜索时需要根据文本内容匹配搜索选项,所以放行。因此我们尝试伪装User-agent为Baiduspider。res.text果然不出所料,我们成功地获取到了目标内容。

m0_60452141的博客 1603

python爬取Baidu文库格式内容附完整项目、代码(request,selenium,C#winform......)

背景介绍 这个学期上了Python课,最后的结课方式是大作业的形式。 考虑到现在大部分小伙伴使用Python主要因为爬虫,那么为了更好地帮助大家巩固爬虫知识,加深对爬虫的理解,我们小组选择了爬取百度文库作为我们的大作业。 现在将我们的大作业分享出来,希望能够帮助到大家。 概要 TXT,DOCX爬取与保存(文本格式) PPT,PDF爬取与保存(图片格式) 简单的GUI制作 通过本文你将收获 基本的爬虫技能 DOCX,Image库的使用 废话不多说,我们开始。 TXT,DOCX爬取与保存 在爬取任何东

zll_hust的博客 3477

python爬取文库文档_python 解析爬取某度文库 !

原理是 利用浏览器 切换成手机版找规律(存放在webapp...的url里想研究的可以去看看),主要是翻页 比较复杂目前还不完善 能解析大部分 某度文库文档 和图片(有图片的就下载)Python资源共享群:626017123# -*- coding: utf-8 -*-import requestsimport refrom json import loadsimport osfrom tqd...

weixin_39949954的博客 1260

Python爬虫----爬取百度文库中的文章

下面这些面试题是都来自阿里、腾讯、字节等一线互联网大厂,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。如果觉得上面的实战案例有点枯燥,可以试试自己用Python编写小游戏,让你的学习过程中增添一点趣味!,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为面。,都是我自己学习时整理的,希望可以帮到你,一起加油!😝有需要的小伙伴,可以。

bagell的博客 1467

爬取百度知道分类_教你用 Python 爬取 Baidu 文库格式文档

考虑到现在大部分小伙伴使用 Python 主要因为爬虫,那么为了更好地帮助大家巩固爬虫知识,加深对爬虫的理解,选择了爬取百度文库作为我们的目标。废话不多说,我们开始。TXT、DOCX 爬取与保存这是小编准备的python基础学习资料,关注,转发,私信小编“01”即可免费领取!在爬取任何东西之前,我们都要先确认需要爬取的数据是不是异步加载的;如果是异步加载的直接爬取网页是爬不到的。要知道是不是异步加...

weixin_39633276的博客 512

Python百度文库爬虫终极版

百度文库爬虫 Python百度文库爬虫之txt文件 Python百度文库爬虫之doc文件 Python百度文库爬虫之pdf文件 Python百度文库爬虫之ppt文件 Python百度文库爬虫之xls文件 Python百度文件爬虫终极版 我们在开始爬虫之前,首先要了解网页的信息和结构,然后获取请求的url和参数(payloads)来得到所要的数据并处理。接下来我们根据: 一.网页分析 二.爬虫...

V_lq6h的博客 3万+

百度文库爬虫,Python爬取百度文库内容输出word文档low版

一个比较简单的文库爬虫,所以带来的后遗症也很多明显,比较low比,只能爬取word,txt,ppt别想了,同时不能有折叠的内容,当然vip的内容也不要妄想了,百度吃相还是真难看,有钱真的...

二爷记 3804

python爬取百度文库DOC文档的简易脚本

页面分析 我们首先在百度文库随便搜索一片文章,(此脚本只针对DOC文档)打开它,查看源码 我们定位到具体某行文字,可以发现文字都分布在各个标签内部,这时候和我一样初学爬虫的小伙伴会想到用request来获取html源码,用BeautifulSoup进行操作,想法是好的,可是现在的百度文库不是以前,现在的百度文库的反爬手段还是有的,当你request下来后你会发现根本找不到文章中的文字,道高一尺魔...

qq_28837549的博客 5945

10分钟教会你用Python爬取 Baidu文库 格式内容

返回百度文库,我们仔细看看源代码,其实我们可以发现,随着页面的变化,源代码是不断改变的,每次都只有3张图片的url。并且这个页码数也有一定的规律,如果在第二页,那么图片就是1,2,3,如果在第三页,图片就是2,3,4。但是,从常识来讲,如果网页的内容是异步加载的,那么直接通过百度搜索,是搜索不到网页内部的内容的,但是很显然,我们每次通过百度搜索都是可以直接找到文库中的文本内容的。对待异步加载的数据,我们通常采取的策略有两种,第一个就是直接找到发起异步请求的接口,自己构造请求头,发起请求,第二个就是通过。

python03012的博客 1269

爬取百度文库文章

百度文库爬取提要网页分析软件要求requests介绍程序编写 提要 相信很多小伙伴在网上摘抄论文的时候都曾经受过百度文库无法复制的苦吧,那么我们是真的没办法把这些文字复制下来了吗? 答案是否定的,小编的观点是,竟然是出现在我们浏览器上面的内容了,当然就可以拿下来啦,下面以爬取国大学生同上一堂思政课观后感为例。 网页分析 我们对下面的网页进行分析: 同上一堂思政课观后感 首先查看网页源代码,我们发...

weixin_42494845的博客 7181

10分钟教你用Python爬取Baidu文库格式内容,2024年最新面试过程视频教程

Python崛起并且风靡,因为优点多、应用领域广、被大牛们认可。学习 Python 门槛很低,但它的晋级路线很多,通过它你能进入机器学习、数据挖掘、大数据,CS等更加高级的领域。Python可以做网络应用,可以做科学计算,数据分析,可以做网络爬虫,可以做机器学习、自然语言处理、可以写游戏、可以做桌面应用…Python可以做的很多,你需要学好基础,再选择明确的方向。这里给大家分享一份套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

m0_60707708的博客 1055

使用python爬取文库文档

下载doc文档 百度文库直接查看源代码并不能显示出页面上的文本内容,F12 network 也没有比较明显的接口,于是百度发现一篇文章 地址 https://www.cnblogs.com/huangguifeng/p/11829323.html 老哥牛掰,找到了文档的接口还提供了代码,记录一下,以免忘记 import requests import re import json from doc...

foolcuntry的博客 6840

绕过反爬虫:用Python高效爬取百度文库的秘籍

百度文库百度公司提供的一个文档在线分享平台。用户可以在该平台上发布并分享自己的文档,也可以在平台上查找和下载其他用户分享的文档。本文将介绍如何使用Python实现爬取百度文库的功能。要使用Python爬取百度文库的内容,可以按照以下步骤进行操作:2024年最新python教程套,学完即可进大厂!(附套视频 下载) (qq.com)分析网页结构首先需要了解百度文库的网页结构和数据加载方式。很多内容是通过异步加载的,直接访问网页源代码可能看不到完整的内容。设置请求头。

R5463995的博客 2219

Python爬虫——爬取百度文库文章

爬取-百度文库中的文章 爬取大多数百度文库的文章或图片数据

微生成白 4838

教你用Python一分钟破Baidu文库付费限制,白嫖Baidu文库格式内容

教你用Python一分钟破Baidu文库付费限制,白嫖Baidu文库格式内容

python03011的博客 2037
上一篇: Python助你秒抢红包,拼手速?不存在!
下一篇: 想要快速入门python,我用一本电子书助你,python大牛倾力推荐
python588
博客等级 码龄7年 338粉丝 132原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值