pip 换源与临时换源

永久换源 pip config set global.index-url https:// 临时换源 pip install --index-url https:// module pip install module -i https:// 常用源 清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/ 阿里云 http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/ 豆瓣(douban) http://pypi.douban.com/simple/ 中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/ 其中中国科技大学还挺好

2021-03-19 · 1 min · 73 words · kutake

模拟登录相关

一个网页不需要登录,就可以随意访问网站的所有具体信息的话,那就好比是一个敞开了大门的网站,摆好酒桌好吃好喝招待爬虫脚本们,数据提取的成本非常低。于是比较常规的网站,都会使用账号登录来提高网站对于每个想要查看网站数据的门槛,所以模拟登陆的问题就是必修课 ...

2020-08-05 · 4 min · 1513 words · kutake

Scrapy+随机User-Again+随机高匿代理ip爬取全球最大的同人网站上万条信息

确定需求 DLsite是全球最大的同人贩卖网站,里面包括漫画、音声、动画、游戏等等来自不同国家不同地区不同语言以及不同形式的二次元创作作品,这个项目暂定是爬取home下的所有漫画信息作为统计数据,链接为: ...

2020-07-30 · 7 min · 3500 words · kutake

scrapy+mysql:2006错误解决方法

首先放上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错误 ...

2020-07-28 · 3 min · 1183 words · kutake

关于ValueError: too many values to unpack错误

在写scrapy的时候遇到的一个坑,准备了一个由“无”元素作为value的字典作为蓝本,遍历从scrapy上得到的items字典数据,把其中有的元素放到第一个作为蓝本的字典中,于是这里就有两个操作,读取第二个字典,修改第一个字典 ...

2020-07-27 · 1 min · 212 words · kutake

实战:comic walker漫画多章节爬虫

为什么要做 还在做汉化组的扒图的时候,一直觉得comic walker这个站点的漫画拔起来非常麻烦,因为它自带一个阅读器界面,异步加载图片,而且无法右键,甚至在网页元素中,也无法直接保存图片(这应该是漫画网站的常见配置了),只能一个个在控制台中拖动图片至新的标签页才能加载图片并保存,十分麻烦,正好学习python中,就写了这个小工具。 ...

2020-07-15 · 5 min · 2474 words · kutake

json文件转xls文件

#写成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')

2020-06-27 · 1 min · 92 words · kutake

实战:词云生成

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))

2020-06-27 · 1 min · 204 words · kutake

实战:RJ爬虫并上传本地SQL

下载了上百个RJ后,如何根据声优或分类喜好来找到自己喜欢的作品就成了个问题,于是诞生出了这个代码 问题拆分 定位需求 查询RJ主要是在对该RJ文件夹对应网页中的标题、声优、制作社团与分类,拿到具体数据后,对数据进行查询操作。 ...

2020-06-27 · 3 min · 1290 words · kutake

生成四位验证码并验证

#四位数数字字母验证码,显示进行输入判断验证 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)

2020-06-27 · 2 min · 560 words · kutake