不要着急花更多的时间去赚钱,去花时间,让自己的时间更值钱。薪资只是你个人能力的附属品
简介:
因为我们学校有社会实践这种东西,需要写一个社会实践心得,但是呢,我在家研究了一个半月的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)
网友评论