使用python中的Selenium爬取百度文库word文章

本文介绍如何使用Selenium和Python爬取百度文库的Word文档内容,通过分析网页结构,定位并提取文本,适用于不同版本的Chrome浏览器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考文章:Python3网络爬虫(九):使用Selenium爬取百度文库word文章,链接为: https://blog.youkuaiyun.com/c406495762/article/details/72331737,感谢作者。

python版本:3.6

运行平台:windows

浏览器:chrome

本文是在该参考文章的基础上写作,请各位在阅读参考文章的基础上再阅读本文,关于Selenium库及chromedriver的相关内容及各种库的安装本文不再赘述。

另外,ChromeDriver 76.0.3809.68(win32,win64使用,使用时需注意chrome版本)链接:https://download.youkuaiyun.com/download/weixin_39603637/11518044

如果在chromedriver配置环境变量后仍不能正常使用,可以这样写(注意,有r,文件路径为你自己的路径,需修改),不过重启电脑之后可能就可以直接使用了:

browser = webdriver.Chrome(executable_path=r'D:\Anaconda\anaconda\chromedriver_win32\chromedriver.exe')

接下来,就开始实战,注意,在阅读下面内容之前,请阅读在本文开头的参考文章,链接为:https://blog.youkuaiyun.com/c406495762/article/details/72331737

本文与参考文章选取相同文章进行爬取,参考文章选择使用手机模式进行爬取,而本文选取网页模式,待爬取的文章链接为: https://wenku.baidu.com/view/aa31a84bcf84b9d528ea7a2c.html

 

  1. 1.网页分析

打开链接后,你会看到这样的界面:

怎样才能看到剩下的内容呢?

鼠标放在“继续阅读”处,单击右键,再选中“检查”,可以看到如下界面:

 可以看到,"还剩10页未读,继续阅读"在<span class='moreBtn goBtn'>,在可以用如下代码进行处理以得到全部文本内容:

# 滚动至元素ele可见位置(即阅读更多部分)
eles1 = driver.find_elements_by_xpath("//span[@class='moreBtn goBtn']")
ele1 = eles1[0]
driver.execute_script("arguments[0].scrollIntoView();",ele1)
#向上滚动
driver.execute_script('window.scrollBy(0,-200)')
#点击阅读更多
ele1.click()

那么,接下来就该看看百度文库的文本究竟在哪里,同样的,在已经点击“阅读更多”后,随意选中一段文字,然后单击右键,再选中“检查”,即可看到以下界面:

 

可以发现,文库的文本内容在<div class='ie-fix'>中,但是在不断寻找该标签的父标签后,我们会看到下图的情况:

 注意上图中画线的部分,我们观察后可以发下,文库的word文档是以文库的页数进行切分的,然而每个标签的class的属性却有两种,因而,为成功获取所有文本,我们可以采用正则表达式,具体如下:

#找到存放文本的标签
bdwk5=bdwk1.findAll('div',{'class':re.compile('^mod reader-page complex.*')})

 至此,网页分析告一段落。

2.文本获取

网页分析后的文本获取相对简单了,这里不再赘述,大家根据代码自行理解即可,本文代码的逻辑可能不够严密,请大家指正。

3.完整代码展示

from selenium import webdriver
from bs4 import BeautifulSoup
import time
import re
driver = webdriver.Chrome()
driver.implicitly_wait(1)
# 设置窗口大小
driver.set_window_size(800, 1000)
#填写要爬的百度文库word的链接
url="https://wenku.baidu.com/view/80060ae01eb91a37f1115cd5.html"
driver.get(url)
# 滚动至元素ele可见位置(即阅读更多部分)
eles1 = driver.find_elements_by_xpath("//span[@class='moreBtn goBtn']")
if eles1!=[]:
    ele1 = eles1[0]
    driver.execute_script("arguments[0].scrollIntoView();",ele1)
    #向上滚动
    driver.execute_script('window.scrollBy(0,-200)')
    #点击阅读更多
    ele1.click()

#获取此时页面资源
html=driver.page_source
bdwk1=BeautifulSoup(html,'html5lib')
#定义一个列表,用于之后文本的处理
textlist=[]
#找到存放文本的标签
bdwk5=bdwk1.findAll('div',{'class':re.compile('^mod reader-page complex.*')})
#对每个存放文本的标签进行遍历处理
for bdwk6 in bdwk5:  
    #获取该bdwk6下class的属性,得到的是字典
    a=bdwk6.attrs['class']
    #将a中的元素使用空格连接,得到字符串
    b=' '.join(a)
    #组合成xpath的标签形式,并使页面滚动至该页面处
    c="//div[@class='"+b+"']"
    eles3 = driver.find_elements_by_xpath(c)
    ele3 = eles3[0]
    driver.execute_script("arguments[0].scrollIntoView();",ele3)
    time.sleep(0.5)#注意,此处不要删,可根据情况自行设置
    #取得该页面涉及到的文本资源
    html=driver.page_source
    bdwk1=BeautifulSoup(html,'html5lib')
    bdwk2=bdwk1.find_all('div',{'class':'ie-fix'})
    #对是否取得重复文字进行判断,若不重复,则写入wenku.txt
    for bdwk4 in bdwk2:
        d=bdwk4.get_text()
        if d not in textlist:
            textlist.append(d)
            with open('G:\wenku.txt','a',encoding='utf-8') as f:
                f.write(str(d))                 #将字符串写入文件中
            print(d,end='')    
driver.close()

 该代码在2019年8月11日可以使用。

4.运行结果展示

运行结果展示如下:

 改变要爬取的链接:https://wenku.baidu.com/view/7fc9f495951ea76e58fafab069dc5022aaea46cc.html,仍可成功爬取,结果如下:

 

 至此,本文结束,如果对您有帮助,请点个赞呦,如有问题请评论,我会尽量回复。

再次感谢参考文章作者!

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值