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 ...
随机推荐
- 【LEETCODE OJ】Candy
Problem link: http://oj.leetcode.com/problems/candy/ Suppose we are given an array R[1..N] that are ...
- Java 解惑:Random 种子的作用、含参与不含参构造函数区别
Random 通常用来作为随机数生成器,它有两个构造方法: Random random = new Random(); Random random2 = new Random(50); 1.不含参构造 ...
- Inno Setup使用上的几个问题
Inno Setup使用上的几个问题 分类: Install Setup 2013-02-02 15:48 1781人阅读 评论(0) 收藏 举报 Inno Setup使用上的几个问题: [问题一:I ...
- document操作
1.windows对象操作 事件两个参数sender:代表事件源,即谁触发的事件e:代表事件数据load(sender,e)事件是一个特殊的委托(代理)2.document对象操作找元素:1.根据id ...
- Windows Server 2008 R2: 创建任务计划
task Scheduler 在业务复杂的应用程序中,有时候会要求一个或者多个任务在一定的时间或者一定的时间间隔内计划进行,比如定时备份或同步数据库,定时发送电子邮件等. 创建一个任务计划: 开始St ...
- 第二个Sprint冲刺第二天
讨论地点:宿舍 讨论成员:邵家文.李新.朱浩龙.陈俊金 任务:解决了第二个Sprint冲刺第一天遇到的错误. 燃尽图: 遇到的问题: 解决之后: 开发感悟:最近一直在写代码,都很少外出活动了,不知不觉 ...
- Linux systemd 打开调试终端、添加开机自运行程序
/************************************************************************* * Linux systemd 打开调试终端.添加 ...
- I.MX6 bootargs 内核参数设定
/******************************************************************** * I.MX6 bootargs 内核参数设定 * 说明: ...
- 《JS高程》基本类型和引用类型的值学习笔记
ECMAScript 变量可能包含两种不同数据类型的值:基本类型值和引用类型值. 创建方式类似:创建一个变量并为其赋值. (1)基本类型值和引用类型值比较 基本类型值 引用类型值 简单的数据段 可能由 ...
- Sonar + Jacoco,强悍的UT, IT 双覆盖率统计(转)
以前做统计代码测试覆盖,一般用Cobertura.以前统计测试覆盖率,一般只算Unit Test,或者闭上眼睛把Unit Test和Integration Test一起算. 但是,我们已经过了迷信UT ...