Python爬虫实战:获取Jira文件结构并爬取文档内容


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

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

jira爬虫获取文件结构python python爬取文档_搜索

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


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()
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

运行之后,你会发现,在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.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

在点击继续阅读按钮之前,最好先判断这个按钮是否存在,如果只有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
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.


注意:有可能会因为百度文库的广告导致将继续阅读按钮遮住,致使点击的时候,点击不到继续阅读按钮,所以,你需要找到广告的位置(需要先判断广告是否存在,再做处理,否则可能会报错),然后,使用让隐藏按钮可以点击的方法处理广告即可。


#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)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.

输出结果:


jira爬虫获取文件结构python python爬取文档_css_02



QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空