python爬虫系列之爬取百度文库(四)

前三篇博客已经介绍了,如何利用selenium去爬取一个指定内容的百度文库的文章链接和文章的名称,接下这篇博客主要介绍的是,针对于一篇文章我们应该如何去爬取所有的内容

1、分析文章的页面结构,文章地址https://wenku.baidu.com/view/1d03027280eb6294dd886cb7.html?from=search


通过上图我们可以观察到,打开文章链接之后,可能有的文章显示不全需要点击“继续阅读”按钮之后,才能看到所有的内容。

if __name__ == "__main__":
    browser = webdriver.Chrome()
    browser.get("https://wenku.baidu.com/view/1d03027280eb6294dd886cb7.html?from=search")
    #获取点击继续阅读按钮
    goBtn = browser.find_element_by_class_name("goBtn")
    goBtn.click()
运行之后,你会发现,在pycharm的控制台报错,selenium.common.exceptions.WebDriverException: Message: unknown error: Element <span class="moreBtn goBtn">...</span> is not clickable at point (449, 565). Other element would receive the click: <div class="content" id="reader-evaluate-content-wrap" data-id="1d03027280eb6294dd886cb7" data-value="-1" data-doc-value="0">...</div>,这个错误的意思是不能去点击这个标签,它可以去点击这个div。为什么会这样呢?细心的朋友可能会看见上图的右下角有一个箭头,仔细看有一句style属性是,overflow:hidden这句话的意思是隐藏这个标签,所以才导致这个错误的发生。selenium的python api链接 http://selenium-python.readthedocs.io/api.html,解决办法如下,

if __name__ == "__main__":
    browser = webdriver.Chrome()
    browser.get("https://wenku.baidu.com/view/1d03027280eb6294dd886cb7.html?from=search")
    #找到继续阅读按钮的上一级div,banner-more-btn是div的类名用.,ID用#
    hidden_div = browser.find_element_by_css_selector("#html-reader-go-more")
    #获取阅读按钮
    gotBtn = browser.find_element_by_css_selector("#html-reader-go-more .banner-more-btn")
    actions = webdriver.ActionChains(browser)
    actions.move_to_element(hidden_div)
    actions.click(gotBtn)
    actions.perform()
在点击继续阅读按钮之前,最好先判断这个按钮是否存在,如果只有1页的时候,是不会有这个按钮的,判断方法,可以用之前的方法进行判断。获取文章的所有内容

time.sleep(3)
    #获取包含内容的div 
    div_text = browser.find_elements_by_class_name("ie-fix")
    for temp in div_text:
        text = temp.text
        print text
注意:有可能会因为百度文库的广告导致将继续阅读按钮遮住,致使点击的时候,点击不到继续阅读按钮,所以,你需要找到广告的位置(需要先判断广告是否存在,再做处理,否则可能会报错),然后,使用让隐藏按钮可以点击的方法处理广告即可。
#encoding:utf8
import sys
reload(sys)
sys.setdefaultencoding("utf8")
from selenium import webdriver
import time

def gethrefAndFilename(browser):
    # 打开百度文库的首界面
    browser.get("https://wenku.baidu.com/")
    # 通过ID找网页的标签,找到搜索框的标签
    seek_input = browser.find_element_by_id("kw")
    # 设置搜索的内容
    contents = "饮料"
    contents = str(contents).decode("utf8")
    seek_input.send_keys(contents)
    # 找到搜索文档按钮
    seek_but = browser.find_element_by_id("sb")
    # 并点击搜索文档按钮
    seek_but.click()
    # 文件标签集合
    list_href = []
    # 文件名称集合
    list_filename = []
    while True:
        # 获取所有的文档a标签,这里的elements指的是有多个元素,*表示的是任意的(在xpath中可以用)
        all_a = browser.find_elements_by_xpath("//*[@id=\"bd\"]/div/div/div[4]/div/dl[*]/dt/p[1]/a")
        for a in all_a:
            # print a.get_attribute("href")
            # print a.get_attribute("title")
            list_href.append(a.get_attribute("href"))
            list_filename.append(a.get_attribute("title"))
        # 获取body标签,的html
        body = browser.find_element_by_tag_name("body")
        body_html = body.get_attribute("innerHTML")
        # 判断下一页按钮是否存在
        flag = str(body_html).find("class=\"next\"")
        if flag != -1:
            # 获取下一页按钮的标签,这里用的是class标签,因为它只有一个
            next_page = browser.find_element_by_class_name("next")
            # 点击下一页
            next_page.click()
            # 点击之后,睡眠5s,防止页面没有加载完全,报no such element的错误
            time.sleep(5)
            break
        else:
            break
    return list_href,list_filename

def getContentsByHref(href,browser):
    browser.get(href)
    body = browser.find_element_by_tag_name("body")
    flag = str(body).find("id=\"html-reader-go-more\"")
    if flag != -1:
        # 找到继续阅读按钮的上一级div,banner-more-btn是div的类名用.,ID用#
        hidden_div = browser.find_element_by_css_selector("#html-reader-go-more")
        # 获取阅读按钮
        gotBtn = browser.find_element_by_css_selector("#html-reader-go-more .banner-more-btn")
        actions = webdriver.ActionChains(browser)
        actions.move_to_element(hidden_div)
        actions.click(gotBtn)
        actions.perform()
    time.sleep(3)
    # 获取包含内容的div
    div_text = browser.find_elements_by_class_name("ie-fix")
    for temp in div_text:
        text = temp.text
        print text

if __name__ == "__main__":
    browser = webdriver.Chrome()
    list_href, list_filename = gethrefAndFilename(browser)
    for href in list_href:
        getContentsByHref(href,browser)


输出结果:


  • 6
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
Python合法网页爬虫工具项目分享 内容概览: 这个分享包涵了我开发的Python爬虫工具项目,主要用于合法爬取某些网页信息。以下是主要内容: 源代码:包括Python代码和相关脚本。这些代码展示了如何使用Python进行网页抓取、解析和数据提取。 项目文件:除了代码,我还分享了整个项目的文件,包括设计稿、图标、图片等资源。这些资源对于理解项目背景和设计思路至关重要。 文档与操作手册:为了方便他人理解和使用我的作品,我编写了详细的操作手册和使用说明,同时提供了一份Markdown格式的文档,概述了项目的主要功能和特点。 学习笔记:在项目开发过程中,我记录了大量的学习笔记和心得体会。这些笔记不仅有助于理解项目的开发过程,还能为学习Python爬虫技术提供宝贵的参考资料。 适用人群: 这份项目合集适用于所有对Python爬虫开发感兴趣的人,无论你是学生、初学者还是有一定经验的开发者。无论你是想学习新的技术,还是想了解一个完整的项目开发流程,这份资料都将为你提供极大的帮助。 使用建议: 按部就班地学习:建议从基础的Python爬虫开发开始,逐步深入到实际应用中。通过实践,逐步掌握Python爬虫开发的各项技能。 参考项目文件和笔记:项目文件和笔记提供了丰富的背景信息和开发经验。在学习的过程中,不妨参考这些资料,以帮助你更好地理解和学习。 动手实践:Python爬虫开发是一门实践性很强的技能。通过实际操作,你可以更好地掌握Python爬虫开发的各项技能,并提高自己的实践能力。Python合法网页爬虫工具项目分享 内容概览: 这个分享包涵了我开发的Python爬虫工具项目,主要用于合法爬取某些网页信息。以下是主要内容: 源代码:包括Python代码和相关脚本。这些代码展示了如何使用Python进行网页抓取、解析和数据提取。 项目文件:除了代码,我还分享了整个项目的文件,包括设计稿、图标、图片等资源。这些资源对于理解项目背景和设计思路至关重要。 文档与操作手册:为了方便他人理解和使用我的作品,我编写了详细的操作手册和使用说明,同时提供了一份Markdown格式的文档,概述了项目的主要功能和特点。 学习笔记:在项目开发过程中,我记录了大量的学习笔记和心得体会。这些笔记不仅有助于理解项目的开发过程,还能为学习Python爬虫技术提供宝贵的参考资料。 适用人群: 这份项目合集适用于所有对Python爬虫开发感兴趣的人,无论你是学生、初学者还是有一定经验的开发者。无论你是想学习新的技术,还是想了解一个完整的项目开发流程,这份资料都将为你提供极大的帮助。 使用建议: 按部就班地学习:建议从基础的Python爬虫开发开始,逐步深入到实际应用中。通过实践,逐步掌握Python爬虫开发的各项技能。 参考项目文件和笔记:项目文件和笔记提供了丰富的背景信息和开发经验。在学习的过程中,不妨参考这些资料,以帮助你更好地理解和学习。 动手实践:Python爬虫开发是一门实践性很强的技能。通过实际操作,你可以更好地掌握Python爬虫开发的各项技能,并提高自己的实践能力。Python合法网页爬虫工具项目分享 内容概览: 这个分享包涵了我开发的Python爬虫工具项目,主要用于合法爬取某些网页信息。以下是主要内容: 源代码:包括Python代码和相关脚本。这些代码展示了如何使用Python进行网页抓取、解析和数据提取。 项目文件:除了代码,我还分享了整个项目的文件,包括设计稿、图标、图片等资源。这些资源对于理解项目背景和设计思路至关重要。 文档与操作手册:为了方便他人理解和使用我的作品,我编写了详细的操作手册和使用说明,同时提供了一份Markdown格式的文档,概述了项目的主要功能和特点。 学习笔记:在项目开发过程中,我记录了大量的学习笔记和心得体会。这些笔记不仅有助于理解项目的开发过程,还能为学习Python爬虫技术提供宝贵的参考资料。 适用人群: 这份项目合集适用于所有对Python爬虫开发感兴趣的人,无论你是学生、初学者还是有一定经验的开发者。无论你是想学习新的技术,还是想了解一个完整的项目开发流程,这份资料都将为你提供极大的帮助。 使用建议: 按部就班地学习:建议从基础的Python爬虫开发开始,逐步深入到实际应用中。通过实践,逐步掌握Python爬虫开发的各项技能。 参考项目文件和笔记:项目文件和笔记提供了丰富的背景信息和开发经验。在学习的过程中,不妨参考这些资料,以帮助你更好地理解和学习。 动手实践:Python爬虫开发是一门实践性很强的技能。通过实际操作,你可以更好地掌握Python爬虫开发的各项技能,并提高自己的实践能力。Python合法网页爬虫工具项目分享 内容概览: 这个分享包涵了我开发的Python爬虫

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

修炼之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值