说到入狱,你首先可能会想到小偷流氓,罪犯歹徒,而在大家的认知中程序员们除了脱发、过劳死以及孤独一生以外,似乎和入狱也沾不上边。但在这里先别着急下判断,因为程序员有其实千百种被抓去蹲大牢的可能性,其罪名涉及窃取商业机密、电信诈骗、侵犯版权、洗钱、协助欺诈以及写出不清真的代码。想要避免蹲大牢,程序员首先要明白,你的老板(前老板)可能就是那个触发危险的扳机。
老板搞庞氏骗局,大龄程序员连带背锅
世纪巨骗伯纳德·麦道夫(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 ::text
a_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]+url
download_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=1
headers={'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('
图片
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):
# 可以在 console
wb.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_name
img_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)