刑!太刑了!今天又是一个入狱小技巧
日志
说到入狱,你首先可能会想到小偷流氓,罪犯歹徒,而在大家的认知中程序员们除了脱发、过劳死以及孤独一生以外,似乎和入狱也沾不上边。但在这里先别着急下判断,因为程序员有其实千百种被抓去蹲大牢的可能性,其罪名涉及窃取商业机密、电信诈骗、侵犯版权、洗钱、协助欺诈以及写出不清真的代码。想要避免蹲大牢,程序员首先要明白,你的老板(前老板)可能就是那个触发危险的扳机。
给大家举一个真实案例
老板搞庞氏骗局,大龄程序员连带背锅
世纪巨骗伯纳德·麦道夫(Bernard Madoff)于 2008 年被捕,他的骗局导致投资者损失了超过 170 亿美元本金。2009 年该公司的两名程序员资深杰罗姆·奥哈拉(Jerome O’Hara)和乔治·佩雷斯(George Perez)也被 FBI 逮捕了。这两名程序员分别自 1990 年和 1991 年开始为麦道夫工作,他们被指帮助麦道夫开发能创建虚假交易的计算机程序。2014 年关于他们的判决终于下来了,这两个程序员和麦道夫的前秘书、业务经理,会计经理都被判证券欺诈罪,面临两年半监禁,虽然他们二人都声称不清楚麦道夫的诈骗目的,只是出于对麦道夫的信任为其工作,但是陪审团拒绝接纳他们的辩护理由,两人的律师对陪审团的裁决表示失望,称将会上诉。
所以,大家伙在外打工敲代码时还是多多注意点,要是察觉到有什么异常还是尽早提桶跑路吧,代码和人有一个能跑起来就行(手动滑稽),随着大数据时代的来临,一个特殊的技术活跃在了人们眼前,那便是网络爬虫,它常常以它优秀的收集数据能力在公司成为了必须了解的知识,而我们的这个爬虫便是常常被人说游走于“灰色地带的技术”,兄弟们在学习爬虫的时候,一定要知道哪些数据可以爬,哪些数据不能爬,管好小手,幸福全家。
代码
今天就给大家分享几个爬虫小案例
小说
import requests
import parsel
import time
# content_url='https://www.shuquge.com/txt/8659/2324752.html' #小说章节链接
# index_url = 'https://www.shuquge.com/txt/8659/index.html' #小说网页链接,获取章节
headers={'Host': 'www.shuquge.com','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36 Edg/92.0.902.78'
}
#定义一个函数 也就是一个代码块 封装起来不会运行
#保存一章
def download_one_chapter(content_url):response=requests.get(url=content_url,headers=headers)response.encoding='utf-8'#print(response.text) #html 格式的字符串#请求到了网址链接,接下来要解析数据#css(专门编写html文本的样式) re(专门从字符串中提取数据) xpath(xml html)# :: 属性选择器 可以用来提取数据#::text 提取文字#::attr() 提取属性sel=parsel.Selector(response.text)# 使用parsel解析工具得到一个解析对象title = sel.css('.reader h1::text').getall() #得到的是列表 所以有很多元素content =sel.css('.showtxt::text').getall()# 保存小说with open(title[0]+'.txt',mode='w',encoding='utf-8')as f:f.write(title[0])for c in content:f.write(c.strip()+'/n') #strip 去除字符串两端的空白内容#获取所有章节的下载地址,然后再调用方法进行下载
#保存一本
def download_one_book(index_url):index_response = requests.get(index_url, headers=headers)index_response.encoding='utf-8'sel=parsel.Selector(index_response.text)#需要的是 a 标签里面的href ::texta_list=sel.css('.listmain dl dd a')# 解析每一章的下载地址for a in a_list:#print(a.css('::text').get()) # 目录标题 仅供展示 不用使用url=a.css('::attr(href)').get()content_url=index_url[:-10]+urldownload_one_chapter(content_url)#爬取很多本,一个类别
#数据库,分类别,分小说,按本,分章节保存
#下载一个类别的一页
def download_one_cate_page(category_url):category_response = requests.get(url=category_url, headers=headers)category_response.encoding = 'utf-8'sel = parsel.Selector(category_response.text)a_list = sel.css('.up .l li .s2 a')for a in a_list:index_url = a.css('::attr(href)').get()print(index_url)time.sleep(2)# #异常处理,尝试重试try:download_one_book(index_url)except:pass#下载一个类别
def download_cate(cate_no):cate_page = 1 #所有的类别都是从第一页开始category_url = 'https://www.shuquge.com/category/' + str(cate_no) + '_' + str(cate_page) + '.html'category_response = requests.get(url=category_url, headers=headers)category_response.encoding = 'utf-8'#一个类别的一页#请求到了网址数据,接下来要解析数据# css(专门编写 html文本的样式) re(专门从字符串中提取数据) xpath (xml html))sel = parsel.Selector(category_response.text) #使用parsel解析工具得到一个解析对象page_url=sel.css('.a-btn')[-1].css('::attr(href)').get()end_page=int(page_url.split('_')[-1].split('.')[0])for page in range(1,end_page+1):time.sleep(2)category_url = 'https://www.shuquge.com/category/' + str(cate_no) + '_' + str(cate_page) + '.html'print(category_url)# 下载 一个类别的一页download_one_cate_page(category_url)#爬取一整个网站
cate_no =3
for cate_no in range(1,8):download_one_chapter(download_one_book(download_one_cate_page(download_cate(cate_no))))
视频
import re
from concurrent.futures import ThreadPoolExecutor
import requests#for i in range(1, 500):
def download(i):url='https://v.huya.com/g/all?set_id=31&order=hot&page={}'.format(i)#https://v.huya.com/g/all?set_id=31&order=hot&page=2#https://v.huya.com/g/all?set_id=31&order=hot&page=1headers={'User-Agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Mobile Safari/537.36'}resp=requests.get(url,headers=headers)#print(resp.text)re_ids=re.findall('<a href="/play/(.*?)\.html" class="video-wrap statpid"',resp.text)print(re_ids)#print(re_ids)for index in re_ids:i_url='https://liveapi.huya.com/moment/getMomentContent'params={'videoId': index,'_': '1626673254329'}resp_1=requests.get(url=i_url,params=params)#其实JSON数据就是一段字符串而已#pprint.pprint(resp_1.json())video_url=resp_1.json()['data']['moment']['videoInfo']['definitions'][0]['url']video_title=resp_1.json()['data']['moment']['title']print(video_title,video_url)#video=requests.get(url=video_url).content#with open('video'+video_title+'.mp4','wb')as f:#f.write(video)#print('下完一个了,快关')
if __name__ == '__main__':with ThreadPoolExecutor(50) as t:for i in range(1,100):t.submit(download,i)# print('全部打印完毕!!!')
图片
from selenium import webdriver
import time #内置模块 用来休眠程序
#导入过滤数据模块(解析数据)
from lxml import etree
import requests#第三方模块 强大的网页自动化框架模块
#打开一个谷歌浏览器
wb = webdriver.Edge()#使用这个浏览器去打开页面
wb.get("https://bcy.net/coser/toppost100")
'''
通过函数滑轮到页面底部(左下角)
window.scrollTo(0,docment.body.scrollHeight)
自动化框架里封装了一个方法 , 可以在咱模拟出的浏览器中,执行JS执行
执行四次JS代码,实现页面加载
'''
for i in range(4):# 可以在 consolewb.execute_script("window.scrollTo(0,document.body.scrollHeight);") #execute_script 把js代码转化成python代码# 加上 delay(延迟),给浏览器界面留充分加载时间time.sleep(2)#获取到网页的完整源代码(selenium里封装了一种方法)
html = wb.page_source
# 1.selenium的page_source方法可以直接返回页面源码
# 2.重新赋值后打印出来
print(html)
#关闭网页
wb.close()
#把网页源代码转成html文件
data =etree.HTML(html)
#使用xpath提取数据 @指定属性 / 找到当下元素下的属性
img_urls=data.xpath('//img[@class="rank-cos-img"]/@src')
img_names=data.xpath('//p[@class="rank-avatar-name"]/text()')for img_url,img_name in zip(img_urls,img_names):path = "./cosplay图集/%s.jpg"%img_nameimg_data=requests.get(url=img_url)with open(path,mode='wb')as f:f.write(img_data.content)print('%s 下载完成!'%img_name)
数据资料
import requests
import json
import time
import openpyxl #用于操作Excel文件的
def get_comments(productId,page):url ='https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=10029450620491&score=0&sortType=5&page=2&pageSize=10&isShadowSku=0&rid=0&fold=1'headers={'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 Edg/92.0.902.67'}resp=requests.get(url,headers=headers)resp.encoding='gbk'r=resp.text.replace('fetchJSON_comment98(','')r=r.replace(');','')json_data = json.loads(r)return json_data#获取最大页数
def get_max_page(productId):dic_data=get_comments(productId,0) # 调用刚才写的函数,向服务器发送请求,获取字典数据return dic_data['maxPage']#提取数据
def get_info(productId):max_page=get_max_page(productId)lis=[]for page in range(1,max_page+1): #循环次数comments=get_comments(productId,page)com_lst=comments['comments'] #根据 key 获取 value ,根据comments 获取到评论的列表(每页有10条评论)#遍历评论列表,分别获取每条评论中的内容 尺码 颜色for item in com_lst:connect=item['content'] #内容color =item['productColor'] #颜色size = item['productSize'] #鞋码lis.append([connect,color,size]) #将每条评论的信息添加到列表中time.sleep(3)save(lis)
#用于将爬取到的数据存储到Excel中
def save(lis):wk=openpyxl.Workbook() #创建工作簿对象 xlsx文件被称为工作簿sheet =wk.active #获取活动表#遍历列表 ,将列表中的数据添加到工作表中,列表中的一条数据,在Excel中是 一行for item in lis:sheet.append(item)#保存到磁盘wk.save('销售数据.xlsx')#测试
if __name__ == "__main__":productId='10029450620491'
# print(get_max_page(productId))get_info(productId)
刑!太刑了!今天又是一个入狱小技巧相关推荐
- 【基于Web攻击】的方式发现并攻击物联网设备,又是一个入狱小技巧
近二十年来,DNS重绑定(DNS rebinding)攻击一直是讨论的话题.尽管浏览器厂商做出了努力,但仍然无法找到一个能稳定抵御这些攻击的防御系统.据说这类问题八年前就已经被修复了.但是这类攻击通过 ...
- Python写阴阳师脚本带GUI又是一个学习小技巧!
需要用到环境 Python3. pycharm.天天模拟器.阴阳师. 准备库 pip install pyautogui pip install pywin32 12 需要用到的全部库 import ...
- Python写阴阳师脚本带GUI又是一个学习小技巧
Python写阴阳师脚本带GUI 需要用到环境 Python3. pycharm.天天模拟器.阴阳师. 准备库 pip install pyautogui pip install pywin32 需要 ...
- 程序员的反击!每天一个离职小技巧
作者 | 梦想橡皮擦 来源 | 非本科程序员(ID:htmlhttp) 写在前面 俗话说的好,代码写的少,离职少不了. 最近畅游互联网,发现一些离职小技巧,读后,内心被深深的打动了,但是细细的品过之后 ...
- Pyinstaller打包python文件太大?教你三个小技巧有效减小文件体积
简介 有时候需要在未安装Python环境的平台上运行py程序,使用pyinstaller打包很方便,但打包后的可执行文件实在是太大了.原因在于打包时pyinstaller本就已经关联了很多的pytho ...
- 3分钟学会python_3分钟学会一个Python小技巧
Python时间日期转换在开发中是非常高频的一个操作,你经常会遇到需要将字符串转换成 datetime 或者是反过来将 datetime 转换成字符串. datetime 分别提供了两个方法 strp ...
- pandas apply lambda_一分钟一个Pandas小技巧(二)
" 在逛Kaggle的时候发现了一篇不错的Pandas技巧,我将挑选一些有用的并外加一些自己的想法分享给大家.本系列虽基础但带仍有一些奇怪操作,粗略扫一遍,您或将发现一些您需要的技巧.&qu ...
- vob转mp4,每天一个实用小技巧
vob转mp4,vob的英文全称是Video Object,它是DVD视频媒体使用的容器格式,vob格式擅长将数字视频.音频.字幕.菜单等多个元素复用在流格式中.而且vob格式的文件可以被加密保护.经 ...
- 每天一个前端小技巧——生成gif动图下载
每天一个前端小技巧--生成gif动图下载 动态热图的展现,分别展现某个时间段的热图时间变化,例如:最近一周七天内,每天的热图分布变化图:这个动态变化的图生成一个gif图提供下载是否可行? 实现方案: ...
最新文章
- 老程序员的经验和价值在哪里
- js获取及判断按键的方法
- 从搭建脚手架到在npm上发布react组件
- VGG-16 prototxt
- JAVA记事本的图形用户界面应用程序含过滤
- java面向对象的特征二:继承性 —(14)
- spring boot缓存_Spring Boot和缓存抽象
- kafka清理数据日志
- linux vim 添加注释_vim基础教程
- php日期分页,php – Laravel分页不适用于日期搜索
- 转-流框架中DOMContentLoaded事件的实现
- php 放大镜代码,jQuery实现放大镜效果实例代码_jquery
- JAVA 身份证号码的验证
- 大数据应用的发展趋势
- 系统架构设计师 - ESB 企业服务总线
- 利用TCGA癌症基因进行差异分析
- 方波与sinc函数之间的最全傅里叶变换关系_助记_有图有推导
- 5.6版本GTID复制异常处理一例(转)
- 温州科技职业学院 计算机网络技术,浙江【温州科技职业学院】_计算机网络技术专业建设方案.doc...
- Websocket系列 -- 协议详解