免费资源猫-爱分享的猫。
最近小编在弄python爬虫项目,可能大家一听爬虫,就觉得高大上,其实爬虫并没有多难,只要你稍微研究一下,掌握了基础的东西,后续爬虫就是重复利用的事情了。今天给大家来一下普及,希望你都能掌握
01
搭建环境
既然是python爬虫,自然先要安装好python环境,从事技术的人都知道开发IDE,其实小编其实有不是必须的,只要是文本编辑器都可以,当然对于小白还是建议安装IDE,这样能减少不少配置的工作。
这里就推荐搭建下载安装一下:PyCharm
具体安装下载地址和安装就不赘述了。
下载安装完,会让你选择python库的版本,根据自己的需要进行下载安装。
安装成功后,基本你的python基础环境就有了,可以在python console窗口查看自己的python版本,和运行命令
02
开始编码
首先工具引用库 (前提是你安装的是python3.x版本)
pip3 install requests
pip3 install my_fake_useragent
pip3 install python-docx
pip3 install opencv-python
pip3 install python-pptx
pip3 install selenium
pip3 install scrapy
pip3 install beautifulsoup4
有了这些库之后,就可以进入正式的逻辑
首先给大家讲下整个项目的原理,其实整理一句话就是,用代码控制浏览器,然后操作浏览器去模拟人的操作,然后在利用截图,下载等方式将内容保存下来的过程。
既然是控制浏览器,那必不可少的就是下载浏览器的执行文件
本文使用的是浏览器chrome谷歌浏览器,我相信大家用这个浏览器的人还是大多数的。
chromedriver下载地址:http://npm.taobao.org/mirrors/chromedriver/ 这个地址下载对应版本的chromedriver,比如你的浏览器版本是87.0.4280,你就可以找到87.0.4280.20/这个链接,如果你是windows版本然后选择chromedriver_win32.zip
也就是说是通过chromeDriver去打开你本地的chrome浏览器,然后模拟操作,所有就需要下载对应好你本地安装的版本。
新建download_doc_ppt_bdwk.py,是本工具的主要类
新建启动main
if __name__ == "__main__":
start_chrome = StartChrome()
# start_chrome.create_doc_txt(doc_dir_path)
start_chrome.create_ppt_doc(ppt_dir_path, doc_dir_path)
#start_chrome.test(ppt_dir_path, doc_dir_path)
# start_chrome.brower.quit()
先启动一个chrome
def __init__(self):
mobile_emulation = {"deviceName": "Galaxy S5"}
capabilities = DesiredCapabilities.CHROME
capabilities['loggingPrefs'] = {'browser': 'ALL'}
options = webdriver.ChromeOptions()
# 无界 Chrome 运行
# options.add_argument('--headless')
# options.add_argument('--disable-gpu')
# options.add_argument('--window-size=1366,768')
options.add_experimental_option("mobileEmulation", mobile_emulation)
self.brower = webdriver.Chrome(executable_path=chromedriver_path, desired_capabilities=capabilities,
chrome_options=options)
# 启动浏览器,打开需要下载的网页
self.brower.get(url)
self.download_img = DownloadImg()
浏览器可以无界面运行,就是我的电脑不会显示对应的打开一个浏览器界面,也可以显示,如下:
就会显示一个chrome正在受控于自动化测试的界面,然后我们可以看到浏览器已经帮我们打开了对应的页面
先讲一下xpath,这个是整个程序的理解重点,理解了整个基本完成一大半了
def click_ele(self, click_xpath):
# 单击指定控件
click_ele = self.brower.find_elements_by_xpath(click_xpath)
if click_ele:
click_ele[0].location_once_scrolled_into_view # 滚动到控件位置
self.brower.execute_script('arguments[0].click()', click_ele[0]) # 单击控件,即使控件被遮挡,同样可以单击
浏览器打开页面之后,我们要做的就是模拟操作对吧,那模拟操作的肯定是界面上的按钮点击或者表单之类的,那怎么找到我们要的控件呢
find_elements_by_xpath,这个就很重要了,根据函数其实能理解,就是通过xpath去查找对应的元素,其实有个技术基础的人,基本也明白,无外乎findByID, findByTag,findByName等等,在这么方法中,xpath算是相对灵活的一种方式
Selenium提供了以下方法用来定位
find_element_by_id
find_element_by_name
find_element_by_xpath
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector
本工具使用find_element_by_xpath进行定位元素的,具体xpath的语法可能需要你自行百度学习一番了,自然不是本文要阐述的事情。
大家也可以看到,打开页面之后有各种弹屏,所以就要定位弹屏的关闭按钮,然后模拟点击进行关闭,同时文档预览就需要不断的点击分页按钮,让我们能预览所有,因此就需要如下代码
# 点击关闭开通会员按钮
xpath_close_button = "//div[@class='guide-to-univer-app-pop']/div[@class='close-btn']"
self.click_ele(xpath_close_button)
# 点击取消打开百度app按钮
xpath_next_content_button = "//div[@class='btn-wrap']/div[@class='btn-cancel']"
self.click_ele(xpath_next_content_button)
# 点击继续阅读
xpath_continue_read_button = "//div[@class='foldpagewg-icon']"
self.click_ele(xpath_continue_read_button)
# 循环点击加载更多按钮,直到显示全文
click_count = 0
while True:
# 如果到了最后一页就跳出循环
if self.brower.find_elements_by_xpath("//div[@class='pagerwg-loadSucc hide']") or self.brower.find_elements_by_xpath("//div[@class='pagerwg-button' and @style='display: none;']"):
break
# 点击加载更多
xpath_loading_more_button = "//span[@class='pagerwg-arrow-lower']"
self.click_ele(xpath_loading_more_button)
click_count += 1
print("第{}次点击加载更多!".format(click_count))
# 等待一秒,等浏览器加载
time.sleep(1.5)
等这些都正常完成之后,就是完整的展示了文档的界面了,剩下的就是根据文档的类型,做不同的抓取逻辑
# 获取html内容
sel = Selector(text=self.brower.page_source)
#判断文档类型
xpath_content = "//div[@class='file-type-icon file-icon ppt']"
contents = sel.xpath(xpath_content).extract()
if contents:#如果是ppt
self.create_ppt(ppt_dir_path, sel)
else:#如果是doc
self.create_doc(doc_dir_path, sel)
# a = 3333
self.brower.quit()
ppt或者pdf其实原理是一样的,预览的时候就是一张张图片,我们要做的就是把图片都保存下来,然后在图片保存到一个文件中,最终生成ppt或者pdf
文本或者word就更简单,就是获取html中的文本信息,当然一般word文档中的格式可能就需要更细致的研究才能更高的还原,本工具暂未有细化这些功能,当然如果后续有时间,我会单独出一期对应教程。如果大家需要的话,呵呵。
03
效果演示
需要的小伙伴,识别下面的二维码,关注后回【046】即可速取!你懂!
识别二维码,回复:046