前言
不知道大家有没有过这样的经历,当你写论文搜索资料时,好不容易搜到一篇好文章准备往自己论文里复制时却发现复制不了,所以只能硬着头皮把那段话又一个字一个字敲出来(大多数百度文库就是这样)。这样其实很费时间的。那有没有什么好办法啊?我的答案是 当然有啊。要学以致用,接下来就给大家献上我的方法。小白的话可以直接看 第3个—小白福利
1 准备工作
当然干这种事并不是那么简单的,还要做准备工作。记得我之前也写过一个爬虫,但是用我之前写得爬虫去爬取百度文库,所得非所见,就是我用爬虫拿到的网页代码跟我看到的网页内容是有所不一样的,这是因为该网页需要动态爬取,那么就的用到selenium模块,当然爬取下来的网页代码非常长,而且你需要的文本内容在人家代码里,也不好复制。我们在需要一个BeautifulSoup模块来简化提取网页内容。
1.1 安装相关库
关于安装selenium和BeautifulSoup这两个库我不想多讲。命令符输入pip install Beautifulsoup4等待安装完成后输入pip install selenium等待安装完成即可。
1.2 安装Chrome以及驱动
在这个方面我踩了好多坑,所以有必要提醒一下,安装chrome驱动时,一定要安装同版本的驱动这里我提供一个75.0377.90版本的chrome浏览器和75.0377.90的chromedriver浏览器驱动,大家下载后一定要记得安装chrome,驱动不用安装但要记得驱动的文件位置。
点击下载chrome浏览器 ,提取码:nw0i
2 代码实现
接下来我就爬取一个百度文库付费文档来实战一下https://wenku.baidu.com/view/0ed77137814d2b160b4e767f5acfa1c7ab008239.html。点击进入查看
首先看看这个网页
代码实现
from bs4 import BeautifulSoup
from selenium import webdriver
import time
# 定义一个爬虫函数
def get_content():
# chrome驱动器的安装目录
chrome_driver = 'D:\QLDownload\chromedriver.exe'
# chrome浏览器的用户代理
user_agent = '"User-Agent":Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'
# 需要爬取网页的网址
url = 'https://wenku.baidu.com/view/0ed77137814d2b160b4e767f5acfa1c7ab008239.html'
# 需要爬取的页数
page = 1
options = webdriver.ChromeOptions()
options.add_argument(user_agent)
driver = webdriver.Chrome(chrome_driver)
driver.get(url)
driver.encoding ='gbk'
scroll_add_crowd_button = driver.find_element_by_css_selector( '#html-reader-go-more > div.banner-core-wrap.super-vip > div.doc-banner-text')
driver.execute_script("arguments[0].scrollIntoView();", scroll_add_crowd_button)
# 使用selenium的点击,等待加载
try:
driver.find_element_by_css_selector('div.continue-to-read > div.banner-more-btn > span').click()
except Exception as e:
print(str(e))
# 循环滚动滚动条到下一页,每一次滚动都把html加到string类型的html中
for i in range(page):
driver.execute_script("window.scrollBy(0, 1050)")
html = driver.page_source
bf = BeautifulSoup(html)
print(bf.get_text())
if __name__ == '__main__':
get_content()
执行结果
其实运行下来还是一串代码,但在代码里有已经提取好的我们需要的内容,我们只需找找就可以了。可能有人问为什么不用正则表达式提取呢?因为每个网页的内容可能不一样而正则表达式太具有局限性,他只能针对某一类网站专门去匹配,但我做的是所有网站的文本内容的匹配,这就需要我们去在代码中找我们需要的内容.
3 小白福利
到这就结束了吗?不可能,因为上述方法是针对会python的人,不会python的朋友怎么办?接下来就给大家送福利了,我已经将代码打包成可执行exe文件并配有可操作的ui界面。注意! 注意! 注意! 安装chrome及驱动这一步骤必须做。
3.1 送上我写exe
接下来就是下载点击下载PYreptile
下载解压完打开后先安装chrome,如果已经有chrome可以直接下载你的chrome驱动器用,或者用我提供的chrome和驱动器。建议大家用我提供的因为自己配可能不太好配,毕竟我也踩过很多坑。
解压完打开后是这样
我们先拿一个百度文库为例
例:https://wenku.baidu.com/view/a605b2243a3567ec102de2bd960590c69ec3d896.html点击查看
这是随机的一个大学生社会实践心得
第一步:我们打开爬虫exe
第二步查看页数
第三步,查看驱动位置
所以我的最后的目录是:C:\Users\DELL\Desktop\reptile\chromedriver.exe.
最终填写结果
最后点击开始爬取,程序会自动打开chrome,并自动关闭chrome,整个爬取过程全自动,最后会将结果保存为word文档。
总结
总觉得这个做法有点不妥是不是侵权了,上位机写得也比较匆忙,也没怎么美化,后续我在慢慢优化吧。目前先将就着用。想要上位机全部代码可以私聊我。上位机是用pyqt5写的,里面涉及的知识点是用selenium驱动chrome爬取内容,再利用BeautifulSoup简化提取代码,最后将代码保存为word.docx文档。其中可能有你需要的知识点。