# 所有文字+【文中外链地址】保存为txt,命名规则:页数_该页第几篇 标题.txt
# 有图片的自动下载,没有图片的就不下载,命名规则:页数_该页第几篇 标题_图片序号(从1开始).后缀
# 这里暂时只有手机登录方式,其他登录方式都很简单,可以自己探索
# selenium用到chromedriver:
Step1:下载chrome浏览器并查看chrome版本
Step2:http://chromedriver.storage.googleapis.com/index.html下载对应版本的chromedriver(没有一样版本的下载附近版本的就可以)
Step3:将chromedriver与本代码放在同一个文件夹中!!!(或者改一下路径代码)
# 如果你熟练使用python,可以跳过以下保姆级啰嗦:
1. 记得先下载代码用到的库
2. 输入手机号、密码和保存路径的那里,可以自行将input改为固定字符串(正确举例:'13900000000',必须带英文引号),路径最后一定要带上'/',而且带'\'的话可能会出问题(正确举例:'D:\Lofter/')
3. 存在图片下载失败的情况会进行提示“5_62_1.png未能保存”并继续运行程序,这种情况下推荐手动去网页里保存一下图片(例如5_62_1.png是第5页第62篇,可以根据已成功保存的5_62 blablabla.txt查看这篇的文字内容,然后在网页上ctrl+F进行查找),失败概率大概是10页(约1000篇图文)里面可能会有5~8张图片无法保存。
4. 存在不明原因中断的情况,会提示“第x页第x篇完蛋 or 第x页完”+“完蛋 or 全部结束”,或仅提示“第x页第x篇完蛋 or 第x页完”就跳转至下一页。这种情况下可重新从第x页第x篇开始下载。
5. chromedriver不要改名!!就叫chromedriver(或者改代码也行)
# 可能会后续更新的点(欢迎继续提出建议):
1. 本来想把文章在Lofter上的tag也写进txt里,后面感觉个人不太需要就没有写了
2. 在评论里的外链没有写进txt,有时间会试着写一下
3. 有可能的话想把外链里的图文也保存下来,工程量比较大,想写的时候再写
4. 如果有bug、建议、疑问,欢迎讨论,虚心接受一切与代码有关和无关的批评建议!!
# !!!写手画手创作不易,请务必尊重版权!!!代码仅作为练习Python或收藏喜欢的图文使用
# 2021/08/08 12:40更新内容:这次的更新包括重新定位、标题存储的修改、循环的精简,以及重点针对网页本身的跳转bug进行了相应调整,应该算是短期内较为完整的一版了。
# 以上说明的最后更新时间:2021/08/08 12:40;代码的最后更新时间:2021/08/10 11:46
import os
import time
from selenium import webdriver
from bs4 import BeautifulSoup
import urllib.request
import random
class Lofter:
def __init__(self):
self.pageleap = int(input('要从第几页开始下载'))
self.articleleap = int(input('要从第{}页的第几篇开始下载'.format(self.pageleap)))
self.endpage = int(input('一共有多少页?'.format(self.pageleap)))
self.username = input('请输入手机号')
self.password = input('请输入密码')
self.savepathf = input('请输入保存地址')
def get_driver(self):
exe_path = os.path.join(os.path.split(__file__)[0], 'chromedriver.exe')
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless') # 增加无界面选项
chrome_options.add_argument('--disable-gpu') # 如果不加这个选项,有时定位会出现问题
self.driver = webdriver.Chrome(executable_path=exe_path, options=chrome_options) # 声明浏览器
url = 'http://www.lofter.com/'
self.driver.get(url) # 打开浏览器预设网址
self.driver.implicitly_wait(30) # 隐式等待
time.sleep(3)
def log_in_by_tel(self):
ele_login = self.driver.find_element_by_xpath(
'/html/body/div[1]/div/div[2]/div[2]/div/div/div[1]/div/a[2]') # 定位手机号密码登录
ele_login.click() # 点击