爬取百度文库的付费文档

不要着急花更多的时间去赚钱,去花时间,让自己的时间更值钱。薪资只是你个人能力的附属品

简介:

因为我们学校有社会实践这种东西,需要写一个社会实践心得,但是呢,我在家研究了一个半月的python,emmmm 你让我拿什么写社会实践心得- -,于是只好百度找一篇咳咳借鉴一下,对,就是借鉴一下。然后找到一篇百度文库的文档,复制一下,恩??没用。下载,恩??还要钱。wtf,你还是人嘛(脸就是那么厚),充钱是不可能充钱的,这辈子都不可能充钱的,学了一个半月的python爬虫,这时候不就派上用场了,人生苦短,我用python

准备:

用到的模块:
  • BeautifulSoup
  • selenium
  • os
安装:

BeautifulSoup的安装方式我在之前一篇博客里面讲过了,需要的可以去看看。
selenium的安装:

pip install selenium

然后还需要一个浏览器的驱动程序,如果你用的Chrome,就去下载Chrome的驱动
如果是firefox,就去firefox下载,
然后解压到/usr/bin 或者 /usr/local/bin里面,就可以了,windows用户就请自行百度了,哈哈。
但是这种方式有个弊端,因为是打开浏览器的缘故,响应速度较慢。解决方式是用Headless Chrome/firefox,无头浏览器。
无头浏览器的意思是没有用户界面的浏览器。正因为没有图形界面的缘故,会比前面的那些浏览器运行速度快很多,
我这里用的就是无头浏览器(Headless Chrome)
安装方式:
headless chrome
如果想使用Headless Chrome 对Chrome版本有一定的要求,从官方文档我们可以看出,mac和linux环境要求chrome版本是59+,而windows版本的chrome要求是60+,同时不同版本的chrome的版本要求的ChromeDriver版本也是不一样的,具体的安装方式和使用方式看官方文档吧。
如果你想用headless Firefox,也类似,具体的安装使用去看官方文档。

分析思路

因为百度文库经过了很多js的渲染,所以果断选择使用selenium,selenium是什么呢,按照百度的说法,selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样,selenium用于爬虫,主要是用来解决javascript渲染的问题,简单来说就是模拟实际用户操作了。然后我们get一个目标网站,调用selenium的page_source方法,获取js渲染以后的源码,使用BeautifulSoup提取我们要的文档。

代码实现

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    import os
    from bs4 import BeautifulSoup

    chrome_options = webdriver.ChromeOptions()
    chrome_options.add_argument('--headless')
    #headless,官方解释是Runs Chrome in headless mode,反正是个必要的参数
    chrome_options.add_argument('user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 10_2_1 like Mac OS X) AppleWebKit/602.4.6 (KHTML, like Gecko) Version/10.0 Mobile/14D27 Safari/602.1"')
    #我把user-agent改成手机版的了

    chromedriver = "/usr/bin/chromedriver"
    os.environ["webdriver.chrome.driver"] = chromedriver
    #调用本地的环境
    driver = webdriver.Chrome(chrome_options=chrome_options,executable_path=chromedriver)
    driver.get("https://wenku.baidu.com/view/8e85d6eac1c708a1294a4425.html")



    html = driver.page_source
    #获取源码
    bf1 = BeautifulSoup(html,'lxml')
    #使用BeautifulSoup分析源码

    #获取文章
    text_list = []
    list_div = bf1.find_all('div', class_= 'content singlePage wk-container')
    for list_p in list_div:
        text = list_p.get_text()
        text_list.append(text)
    a = ''.join(text_list).replace('\xa0', '')
    with open('./wenku.txt', 'w') as f:
        f.write(a)

你可能感兴趣的:(爬取百度文库的付费文档)