全部文章
模拟登录相关
一个网页不需要登录,就可以随意访问网站的所有具体信息的话,那就好比是一个敞开了大门的网站,摆好酒桌好吃好喝招待爬虫脚本们,数据提取的成本非常低。于是比较常规的网站,都会使用账号登录来提高网站对于每个想要查看网站数据的门槛,所以模拟登陆的问题就是必修课 ...
全部文章
一个网页不需要登录,就可以随意访问网站的所有具体信息的话,那就好比是一个敞开了大门的网站,摆好酒桌好吃好喝招待爬虫脚本们,数据提取的成本非常低。于是比较常规的网站,都会使用账号登录来提高网站对于每个想要查看网站数据的门槛,所以模拟登陆的问题就是必修课 ...
确定需求 DLsite是全球最大的同人贩卖网站,里面包括漫画、音声、动画、游戏等等来自不同国家不同地区不同语言以及不同形式的二次元创作作品,这个项目暂定是爬取home下的所有漫画信息作为统计数据,链接为: ...
首先放上piplines的代码 from itemadapter import ItemAdapter import MySQLdb import logging class TestRjPipeline: def __init__(self): host = ('localhost') user = ('root') pass_ = ('123456') db = ('sqlforpy') self.connect = MySQLdb.connect(host,user,pass_,db,charset='utf8mb4') self.cursor = self.connect.cursor() def process_item(self, item, spider): def get_data(items_): data = dict(items_) rj={'ID':'无','title':'无','circle':'无','keyword_creater':'无','data':'无','sname':'无'\ ,'GEN':'无','type_':'无','category':'无','other':'无','pages':'无','genre':'无',\ 'file_':'无','event':'无'} for k in data.items(): rj[k[0]] = k[1] return rj rj = get_data(item) sql = r"""insert into dlsite_cg_copy1(RJ,标题,社团,作者,发售日,系列名,年龄指定,文件形式,作品类型,其他,页数,分类,文件容量,活动)VALUES("%s","%s","%s","%s","%s","%s","%s","%s","%s","%s","%s","%s","%s","%s")"""% (rj['ID'],rj['title'],rj['circle'],rj['keyword_creater'],rj['data'],rj['sname'],rj['GEN'],rj['type_'],rj['category'],rj['other'],rj['pages'],rj['genre'],rj['file_'],rj['event']) try: self.cursor.execute(sql) self.connect.commit() except: logging.debug('%s写入数据库出现错误!'%rj['ID']) logging.debug('内容为:\n{}\n'.format(rj)) self.connect.rollback() logging.debug('此次保存操作结束') def close_spider(self, spider): self.cursor.close() self.connect.close() start之后,总是只能保存第一条信息,然后一直显示2006错误 ...
在写scrapy的时候遇到的一个坑,准备了一个由“无”元素作为value的字典作为蓝本,遍历从scrapy上得到的items字典数据,把其中有的元素放到第一个作为蓝本的字典中,于是这里就有两个操作,读取第二个字典,修改第一个字典 ...
为什么要做 还在做汉化组的扒图的时候,一直觉得comic walker这个站点的漫画拔起来非常麻烦,因为它自带一个阅读器界面,异步加载图片,而且无法右键,甚至在网页元素中,也无法直接保存图片(这应该是漫画网站的常见配置了),只能一个个在控制台中拖动图片至新的标签页才能加载图片并保存,十分麻烦,正好学习python中,就写了这个小工具。 ...
#写成json的文本文件内容,转换为xls文件 import xlwt import os import json def get_(path): with open(path,'r',encoding='utf-8') as f: content=f.read() return content def json_(str): d=json.loads(str) d=sorted(d.items(),key=lambda item:item[0],reverse=False) return d def json_16(str): d=json.loads(str) return d def save_(d,path): workbook=xlwt.Workbook(encoding='utf-8') sheet1=workbook.add_sheet('sheet1') r=0 c=1 for key,value in d: sheet1.write(r,0,key) for i in value: sheet1.write(r,c,i) c+=1 r+=1 c=1 workbook.save(path) def save_16(d,path): workbook=xlwt.Workbook(encoding='utf-8') sheet1=workbook.add_sheet('sheet1') for a,b in enumerate(d): for c,v in enumerate(b): sheet1.write(a,c,v) workbook.save(path) if __name__ == "__main__": p1=r'E:\vscode\code\testwork\txtfile\5.txt' p2=r'E:\vscode\code\testwork\txtfile\5.xls' save_16(json_16(get_(p1)),p2) print('END')
import re import jieba import collections import numpy as np import wordcloud # 词云展示库 from PIL import Image # 图像处理库 import matplotlib.pyplot as plt # 图像展示库 def remove(): with open('remove_words.txt','r',encoding='utf-8') as f: txt=f.read() words = re.findall(r'[^\s]+',txt) list_=[] for i in words: if i in list_: continue else: list_.append(i) return list_ def get_words(path): f=open(path,encoding='utf-8') txt=f.read() f.close() words = jieba.lcut(txt) remove_word=remove() reword = [] for word in words: if len(word) == 1: continue elif word in remove_word: continue else: reword.append(word) word_counts=collections.Counter(reword) return word_counts #统计词频 def wordcount(word_counts): top=word_counts.most_common(20) print(top) def wordc(impath,words): mask=np.array(Image.open(impath)) wc = wordcloud.WordCloud( font_path='C:/Windows/Fonts/simhei.ttf', # 设置字体格式 mask=mask, # 设置背景图 max_words=600, # 最多显示词数 max_font_size=130 # 字体最大值 ) wc.generate_from_frequencies(words) # 从字典生成词云 image_colors = wordcloud.ImageColorGenerator(mask) # 从背景图建立颜色方案 wc.recolor(color_func=image_colors) # 将词云颜色设置为背景图方案 plt.imshow(wc) # 显示词云 plt.axis('off') # 关闭坐标轴 plt.show() # 显示图像 wc.to_file('ff.png') if __name__ == "__main__": path=r'E:\vscode\code\ff.txt' impath=r'E:\vscode\code\topdodo_2.jpg' wordc(impath,get_words(path))
下载了上百个RJ后,如何根据声优或分类喜好来找到自己喜欢的作品就成了个问题,于是诞生出了这个代码 问题拆分 定位需求 查询RJ主要是在对该RJ文件夹对应网页中的标题、声优、制作社团与分类,拿到具体数据后,对数据进行查询操作。 ...
#四位数数字字母验证码,显示进行输入判断验证 from PIL import Image, ImageFilter, ImageFont,ImageDraw import os import random import string import matplotlib.pyplot as plt # ImageFilter:Python中的图像滤波,主要对图像进行平滑、锐化、边界增强等滤波处理。 #随机选取一个数字字母,含大小写 def get_word(): word = string.ascii_letters+string.digits return random.choice(word) #字体像素随机颜色 def font_color(): #random.randint()在范围内取随机数 return(random.randint(32,255),random.randint(23,255),random.randint(32,255)) #背景像素随机颜色 def b_color(): return(random.randint(64,255),random.randint(64,255),random.randint(64,255)) #生成验证码图像,返回一个字符串,表示验证码 def imag(path): w = 60*4 h = 60 d_word='' #新建图像对象 img = Image.new('RGB',(w,h),(255,255,255)) #字体对象 font = ImageFont.truetype(r'H:\gay化\汉化\字体\4书法 - 2\FZ宋s刻d本r秀d楷繁.ttf',60) #类似于画笔 draw = ImageDraw.Draw(img) for i in range(w): for j in range(h): #画背景,用随机颜色填充每个像素 draw.point((i,j),fill=b_color()) for i in range(4): word=get_word() #draw.text方法进行字符绘图,()内:绘图位置,字符,字体,颜色 draw.text((i*60+10,5),word,font=font,fill=font_color()) #单个验证码相加 d_word = d_word + word #保存验证码图像 img.save(path,'jpeg') #返回验证码 return d_word #一个输入函数,调用时返回输入内容 def get_input(): return str(input('请输入验证码:\n')) #运行 if __name__ == "__main__": path = ('test.jpg') str_=imag(path) test_img=Image.open(path) plt.figure('test') plt.imshow(test_img) plt.show() #四次机会 for i in range(4): if str.lower(str_) == str.lower(get_input()): print('验证成功') break else: if i == 3: print('错误次数已用完!') else: print('错误!还有%d次机会'%(3-i)) #结束后删除验证码图像 os.remove(path)
#设定一个分辨率,使一个文件夹内所有大于该分辨率的图像都进行等比例缩放 import os import re from PIL import Image #设置目录 f_path = 'E:/vscode/code/testwork/testFile' #设置iPhone5的分辨率 i_high = 640 i_width = 1136 #使用os.listdir()方法,将目录内的图像文件名,以列表的形式存入list list=os.listdir(f_path) #设置计数初始值 count = 0 #对每个文件进行判断 for pic in list: #path为完整的图像文件路径 path=f_path+'/'+pic #使用Image.open()方法,打开图像文件 im=Image.open(path) #im.size方法获得图像的宽高,分别存入w,h w,h=im.size #当宽度大于i5 if w > i_width: #这里判断:原图像哪边大则依据哪边作为等比缩放比例 if w>h: w_new = i_width h_new = int(h*i_width/w) else: w_new = int(w*i_high/h) h_new = i_high print('%s被修改' %pic) #使用resize()方法修改分辨率,((w,h),此处Image.ANTIALIAS表示高质量) out = im.resize((w_new,h_new),Image.ANTIALIAS) #使用re.sub方法,在字符串pic中,开头至倒数第四位字符替换为添加_new的字符串 newpic = re.sub(pic[:-4],pic[:-4]+'_new',pic) #处理后的图像的完整保存路径 new_path = f_path+'/'+newpic #save方法保存 out.save(new_path) #处理完毕计数+1 count = count + 1 elif h > i_high: if w>h: w_new = i_width h_new = int(h*i_width/w) else: w_new = int(w*i_high/h) h_new = i_high print('%s被修改' %pic) out = im.resize((w_new,h_new),Image.ANTIALIAS) newpic = re.sub(pic[:-4],pic[:-4]+'_new',pic) new_path = f_path+'/'+newpic out.save(new_path) count = count + 1 print('处理结束\n总共有%d个文件被处理' %count)