1kkk
给基友下载漫画看
代码:
# !usr/bin/python3.4
# -*- coding:utf-8 -*- import requests
import os
import time
import re
from lxml import etree
import random def geturl(url,postdata):
header = {'User-Agent':
'Mozilla/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5',
'Referer':'http://m.1kkk.com/vol1-6871/',
'Host': 'manhua1023.61-174-50-131.cdndm5.com',
'Accept': 'image/png,image/*;q=0.8,*/*;q=0.5',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
'Connection': 'keep-alive',
} s = requests.Session()
r = s.post('http://m.1kkk.com/userdata.ashx',data = postdata)
_cookies = r.cookies
#print(r.content)
rs = s.get(url, headers=header,cookies = _cookies)
return rs def get(url):
header = {'User-Agent':
'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0',
'Referer': 'http://www.1kkk.com/manhua589/',
'Host': 'www.1kkk.com'} # 解析网页
html_bytes = requests.get(url, headers=header) return html_bytes def mget(url):
header = {'User-Agent':
'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0',
'Referer': 'http://m.1kkk.com/manhua589/',
'Host': 'm.1kkk.com'} # 解析网页
html_bytes = requests.get(url, headers=header) return html_bytes # 去除标题中的非法字符 (Windows)
def validateTitle(title):
# '/\:*?"<>|'
rstr = r"[\/\\\:\*\?\"\<\>\|]"
new_title = re.sub(rstr, "", title)
return new_title def prints(timesleep):
print('暂停' + str(timesleep) + '秒后开始批量下载图片,请保持网络畅通...')
time.sleep(timesleep) # 解析js
def regnext(js):
reg = r'(var.+?.split)'
all = re.compile(reg);
alllist = re.findall(all, js)
return alllist # 递归创建文件夹
def createjia(path):
try:
os.makedirs(path)
except:
print('目录已经存在:' + path) if __name__ == '__main__': html = get('http://www.1kkk.com/manhua589/').content.decode('utf-8', 'ignore') page = etree.HTML(html.lower())
# 得到网址后缀
hrefs = page.xpath('//ul[@class="sy_nr1 cplist_ullg"][2]/li/a/@href')
# 得到编号
hrefnames = page.xpath('//ul[@class="sy_nr1 cplist_ullg"][2]/li/a/text()')
# 得到页数
hrefpages = page.xpath('//ul[@class="sy_nr1 cplist_ullg"][2]/li/text()') href = []
hrefname = []
hrefpage = []
number = 1 # 不知道里面那几卷是不是漫画里面的
# 先抓下来再说
# 得到网址后缀
for temp in hrefs:
towurl = temp
href.append(towurl)
# 得到编号
for temp in hrefnames:
hrefname.append(temp)
# 得到页数
for temp in hrefpages:
hrefpage.append(temp.replace("页", "")) j = 0
filenamep = '../data/' + str(hrefname[0]) + "/"
createjia(filenamep) for i in range(0, len(href)):
for j in range(len(hrefpage)): # 6871、6872。。
hrefnumber = str(href[i]).replace("ch54-","").replace("/","").replace("vol1-","")
#print(hrefnumber)
# 构造jsurl
# 得到
# http://www.1kkk.com/vol1-6871/imagefun.ashx?cid=6871&page=1&key=65abd421f4aed565&maxcount=10
jsurl = "http://www.1kkk.com" + str(href[i]) + "/imagefun.ashx?cid=" + str(hrefnumber) + "&page=" + str(j + 1) + "&key=65abd421f4aed565&maxcount=10"
print(jsurl) # 构造image网址
html = get(jsurl).content.decode('utf-8', 'ignore')
html1 = regnext(html)
html1 = html1[0].replace("'.split", "").split('|') # http://manhua1023.61-174-50-131.cdndm5.com/1/589/6871/102_9224.jpg?cid=6871&key=d8ce90e0b3f013f292ef77e84da88990&type=1
image_1url = "http://manhua1023." + str(html1[19]) + "-" + str(html1[18]) + "-" + str(html1[9]) + "-" + str(
html1[10]) + ".cdndm5.com/1/589/" + str(href[i]) + "/" + str(html1[20]) + "?cid=" + str(6871) + "&key=" + str(
html1[8]) + "&type=1"
print(image_1url) # 构造image网址
filess = open(filenamep + str(j + 1) + '.jpg', 'wb') # 伪装posrdata
postdata = {
'cid': 6871,
'language': 1,
'mid': 589,
'page': j + 1,
'tp': 8,
'uid': 0
} # 即使正确的网址也是不能下载
pic = geturl(image_1url,postdata)
filess.write(pic.content)
filess.close()
print('已经写入第' + str(j + 1) + '张图片')
j = j + 1 # 每一次下载都暂停1-3秒
loadimg = random.randint(1, 3)
print('暂停' + str(loadimg) + '秒')
time.sleep(loadimg)
selenium抓取:
#!/usr/bin/python3.4
# -*- coding: utf-8 -*- from selenium import webdriver
import time
from selenium.webdriver.common.keys import Keys
import re # 去除标题中的非法字符 (Windows)
def validateTitle(title):
rstr = r"[\/\\\:\*\?\"\<\>\|]" # '/\:*?"<>|'
new_title = re.sub(rstr, "", title)
return new_title def getimg():
# http://www.cnblogs.com/fnng/p/3238685.html
# 打开火狐浏览器
# browser = webdriver.Chrome()
browser = webdriver.Firefox() # 设置浏览器大小
browser.set_window_size(1200, 900)
# 输入网址
browser.get("http://m.1kkk.com/vol1-6871/")
# 根据各自网速来判断网址加载时间
time.sleep(10) for i in range(10000): # 关掉广告
browser.find_element_by_class_name("ad_cross").click() # 翻页到最后面
browser.execute_script("""
(function () {
var y = 0;
var step = 100;
window.scroll(0, 0); function f() {
if (y < document.body.scrollHeight) {
y += step;
window.scroll(0, y);
setTimeout(f, 100);
} else {
window.scroll(0, 0);
document.title += "scroll-done";
}
} setTimeout(f, 1000);
})();
""")
print("下拉中...")
#time.sleep(180)
while True:
if "scroll-done" in browser.title:
break
else:
print("还没有拉到最底端...")
time.sleep(10) # while True:
# # 判断是否存在这个东西
# select = browser.find_element_by_xpath('//a[@class="readTipForm"]')
# if select:
# break
# else:
# print("还没有拉到最底端...")
# time.sleep(60) print("正在下载图片中...")
# 图片的命名
name = validateTitle(browser.current_url)
print("正在截图...")
time.sleep(5) # 截图
browser.save_screenshot("../jpg/cartoon/" + str(i + 1) + str(name) + ".png")
time.sleep(5) # 点击阅读下一章
browser.find_element_by_class_name("readTipForm").click()
print("准备进入下一章...")
time.sleep(5) browser.quit() if __name__ == '__main__':
getimg()
1kkk的更多相关文章
- python之lxml(xpath)
bs4确实没这个好用,bs4的树太复杂 lxml很好 定位非常好 详细解说在注释里面有了 #!/usr/bin/python3.4 # -*- coding: utf-8 -*- from lxml ...
- javascript正则表达式(二)——方法
正则表达式规则见:http://www.cnblogs.com/wishyouhappy/p/3756812.html,下面说明相关方法 String相关方法 概括: search() replace ...
- 零基础如何学Python爬虫技术?
在作者学习的众多编程技能中,爬虫技能无疑是最让作者着迷的.与自己闭关造轮子不同,爬虫的感觉是与别人博弈,一个在不停的构建 反爬虫 规则,一个在不停的破译规则. 如何入门爬虫?零基础如何学爬虫技术?那前 ...
- selenium&phantomjs实战--漫话爬取
为什么直接保存当前网页,而不是找到所有漫话链接,再有针对性的保存图片? 因为防盗链的原因,当直接保存漫话链接图片时,只能保存到防盗链的图片. #!/usr/bin/env python # _*_ c ...
随机推荐
- Cocos2d-x 3.x项目创建
1.首先打开终端,cd到cocos2d-x-3.2目录下,运行命令./setup.py 2. 首先,打开终端cd到目录/cocos2d-x-3.2/tools/cocos2d-console/bin下 ...
- Android屏幕底部弹出DialogFragment(3)
Android屏幕底部弹出DialogFragment(3) 附录文章1,2的DialogFragment是常规的DialogFragment,但是现在的一些Android开发中,往往需要从底部 ...
- WP8.1 实现Continuation程序(打开文件,保存文件等)
以保存文件为例 首先,在项目中加入ContinuationManager.cs类,以及SuspensionManager.cs类. 其次,在App.xaml.cs中,完成如下步骤: 1. 添加Cont ...
- 《JS高程》JS-Object对象整理
继上篇<JS高程>对象&原型笔记,对JavaScript中的Object对象进行了整理,梳理一遍~ 参考文章:详解Javascript中的Object对象 ------------ ...
- 架设 OpenLDAP服务器(转)
OpenLDAP是一个开放源代码的软件,可以免费获取使用,其主页地址是:http://www.openldap.org/.在RHEL 6上安装OpenLDAP还需要libtool-ltdl-2.2.6 ...
- 【题解】【BST】【Leetcode】Validate Binary Search Tree
Given a binary tree, determine if it is a valid binary search tree (BST). Assume a BST is defined as ...
- Nginx 的线程池与性能剖析
http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt158 正如我们所知,NGINX采用了异步.事件驱动的方法来处理连接.这种处理方 ...
- 安装Python+Pywin32(version 3.3)
1.下载python3.3,默认设置,安装. 2.完成后,在开始-程序中运行python IDLE.我在运行时出现了应用程序运行异常,原因是与其他软件内存发生冲突,如.net framework等. ...
- sublime text 2 + Dev-C++/MinGW 组合配置更方便快捷的 C/C++ 编译环境(原创)
首先看一下配置后的效果: 1.直接在底部文本框中显示运行结果(不需要从键盘输入的时候使用): 2.在cmd中运行结果(需要从键盘输入的时候使用): 快捷键说明: 运行: 在底部文本栏显示结果:Ctrl ...
- 【 D3.js 入门系列 --- 0 】 简介和安装
D3的全称是(Data-Driven Documents),顾名思义可以知道是一个关于数据驱动的文档的javascript类库.如果你不知道什么是javascript,请先学习javascript的相 ...