需要安装python的selenium模块,这是一个浏览器自动化的框架。然后我是使用chrome浏览器的,所以还需要安装一个chromedriver。还有一个爬虫框架bs4。
selenium和bs4直接用pip安装,在终端下执行:
pip install selenium
pip install Beautifulsoup4
chromedriver安装参考这个网址:
/technologylife/p/5829944.html
然后进入正文,总的流程就是解析网址的html,取出超链接逐个访问,然后截图到本地的文件夹里,目前实现的版本还没有分类,只是把图片全部存到一个文件夹里。
总的代码如下:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import requests
from bs4 import BeautifulSoup
import time
i=0 #目前暂时先用一个计数来表示图片的文件名
def getScreenShot(url):
'''
此函数用于根据url访问网页,并截图到本地文件夹
'''
global i #全局变量
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu') #设置浏览器参数
brower = webdriver.Chrome(chrome_options=chrome_options) #创建一个chrome的webdrive
brower.maximize_window() #设置全屏截图
js_height="return document.body.clientHeight"
picName = "/home/orange/视频/"+str(i)+".png" #指定保存文件的文件名
brower.get(url) #获取url
i+=1
try:
brower.get(url)
k=1
height=brower.execute_script(js_height)
#获取整张网页的截图,而不只是当前屏幕范围内的
while True:
if k*500
js_move="window.scrollTo(0,{})".format(k*500)
print(js_move)
brower.execute_script(js_move)
time.sleep(0.2)
height=brower.execute_script(js_height)
k+=1
else:
break
scroll_width = brower.execute_script('return document.body.parentNode.scrollWidth')
scroll_height = brower.execute_script('return document.body.parentNode.scrollHeight')
brower.set_window_size(scroll_width, scroll_height)
brower.get_screenshot_as_file(picName)
time.sleep(0.1)
except Exception as e:
print(picName,e)
brower.save_screenshot(picName) #保存截图
brower.close() #关闭webdriver
def getHTMLText(url):
'''
此函数用于获取网页的html文档
'''
try:
#获取服务器的响应内容,并设置最大请求时间为6秒
res = requests.get(url, timeout = 6)
#判断返回状态码是否为200
res.raise_for_status()
#设置该html文档可能的编码
res.encoding = res.apparent_encoding
#返回网页HTML代码
return res.text
except:
return '产生异常'
def main():
'''
主函数
'''
#目标网页,这个可以换成一个你想要的网站
url = '/huwt/'
demo = getHTMLText(url) #获取html代码
#解析HTML代码
soup = BeautifulSoup(demo, 'html.parser')
#模糊搜索HTML代码的所有包含href属性的标签
a_labels = soup.find_all('a', attrs={'href': True})
hash_set=set() #创建一个哈希表,避免对同一个网站重复截图,每当访问一个网站后,将网址加入到哈希表中,如果哈希表中已经有这个网址,则不再截图
#获取所有标签中的href对应的值,即超链接
for a in a_labels:
s=a.get('href')
if s not in hash_set: #如果这个超链接不在哈希表中
hash_set.add(s) #添加这超链接到哈希表
getScreenShot(s) #获取这个网站的截图
main()