天猫数据的自动化爬取
#天猫商品信息
#从selenium中引入webdriver
from selenium import webdriver
import time
#声明一个类
class TianMao(object):
#初始化时,传递要查询的关键词
def __init__(self,keyword):
self.keyword=keyword
def start_taobao(self):
#1.创建firefox浏览器对象
driver=webdriver.Firefox()
#2.打开淘宝网址
driver.get('http://www.tianmao.com')
#3.通过id找到输入框
search_input=driver.find_element_by_id('mq')
#4.输入搜索内容
search_input.send_keys(self.keyword)
注意:
#5.通过class找到搜索按钮
search_btn=driver.find_element_by_css_selector('button[type="submit"]')
#6.点击搜索按钮
search_btn.click()
#休眠2秒
time.sleep(2)
#1.打开文件 encoding=utf-8 指定文件的字符编码
file_handle=open('%s.txt'%self.keyword,'w',encoding='utf-8')
for x in range(1,3):
print('正在获取第%s页数据,请稍后......'%x)
#for 循环执行5次
for x in range(1,11,2):
#休眠1秒
time.sleep(1)
#把x转换小数
j=x/10
#拼接让浏览器滚动的js代码
#%f float类型数据占位符
js='document.documentElement.scrollTop = document.documentElement.scrollHeight *%f '%j
#执行让浏览器滚动的js代码
driver.execute_script(js)
#查找当前页所有的商品信息,返回的是一个列表(elements查找多个)
#电脑,鼠标、键盘.........class_name填写 info-cont
#其他的产品........class_name填写 J_MouserOnverReq
shops=driver.find_elements_by_class_name('product')
print(len(shops))
#如果没有找到数据,换另一种方式去找
# if len(shops)==0:
# shops = driver.find_elements_by_class_name('info-cont')
#for循环遍历列表,取出每一个商品的信息
for shop in shops:
#输出查看商品信息
# print(shop.text)
file_handle.write(shop.text)
file_handle.write('\n\n')
# 找到下一页,点击
next=driver.find_element_by_class_name('ui-page-next')
next.click()
# 3.关闭文件
# 退出浏览器
driver.quit()
#输出
# print(__name__)
#__name__值为__main__表示是从当前文件直接运行
#__name__ 值为 当前文件名称 表示别的文件引用执行的
#如果是从当前文件直接运行的,执行以下代码
if __name__=='__main__':
keyword=input('请输入查询关键词:')
tm=TianMao(keyword)
tm.start_taobao()
苏宁易购数据爬取
from selenium import webdriver
import time
class Suning(object):
# 初始化时,传递要查询的关键词
def __init__(self, keyword):
self.keyword = keyword
def suning(self):
driver=webdriver.Firefox()
driver.get('http://suning.com')
search_input=driver.find_element_by_id('searchKeywords')
search_input.send_keys(keyword)
time.sleep(5)
search_btn=driver.find_element_by_id('searchSubmit')
search_btn.click()
time.sleep(2)
file_handle=open('%s.txt'%self.keyword,'w',encoding='utf-8')
for x in range(1,3):
print('正在爬取第%s页数据......'%x)
for x in range(1,11,2):
j=x/10
js = 'document.documentElement.scrollTop = document.documentElement.scrollHeight *%f ' % j
# 执行让浏览器滚动的js代码
driver.execute_script(js)
# #电脑
# shops=driver.find_elements_by_class_name('product-box')
# if len(shops)==0:
# #好吃的
# shops = driver.find_elements_by_class_name('wrap')
shops = driver.find_elements_by_class_name('res-info')
for shop in shops:
# print(shop.text)
file_handle.write(shop.text)
file_handle.write('\n\n')
next=driver.find_element_by_id('nextPage')
# next=driver.find_element_by_link_text('下一页')
next.click()
driver.quit()
if __name__=='__main__':
keyword=input('请输入查询关键词:')
sn=Suning(keyword)
sn.suning()
学生系统
定义两个类:1.数据类 添加数据
2.模块类 实现的具体功能(创建一个数据类的对象,将这个对象的传入的数据添加到列表中)
#注意:!!!!!泛型遍历,只会匹配内容,执行完从第一个开始找,for x in..先拿出索引
例如:在删除所有同名的数据时:
while 1:
a=False
#注意:!!!!!泛型遍历,只会匹配内容,执行完从第一个开始找,for x in..先拿出索引
for x in range(0,len(self.student_list)):
student=self.student_list[x]
if student.name== name:
#根据student(小列表)在大列表中位置,判断学员信息的序号
# index=self.student_list.index(student,0,len(self.student_list)+1)
print('该学员的序号为:%s'%x)
a=True
if a==False:
name = input('您要查询的学生不在该表,重新输入查询学员的姓名:')
else:
break
该系统实现代码如下:
#数据类
class Date(object):
# 初始化中给对象属性赋值
def __init__(self, name, age, phone):
self.name = name
self.age = age
self.phone = phone
#模块类
class Student(object):
#初始化中给对象属性赋值
def __init__(self):
# self.name=''
# self.age=''
# self.phone=''
self.student_list=[]
#添加学员函数
def add_student(self):
# 输入学员姓名、年龄、电话
self.name = input('请输入学员姓名:')
self.age = input('请输入学员年龄:')
self.phone = input('请输入学员电话:')
#把name、age、phone放在小列表中
# student={'name':self.name,'age':self.age,'phone':self.phone}
student=Date(self.name,self.age,self.phone)
#把小列表添加到所有学员的大列表中
#append(object) insert(index,object) extend(iterable)
self.student_list.append(student)
print('****添加学员成功****')
#查询学员的函数
def query_student(self):
#1.查询所有学员
#2.输入学员姓名 查询学员 得到查询的学员的序号
print('*******学员信息列表*********')
print('1.查询所有学员')
print('2.根据姓名,查询学员序号')
num = input('请选择您的操作:')
# 转换为整数
num = int(num)
# 判断选择学员序号是否在范围内
while num not in range(1,3):
# 不在范围,重新选择
num = input('没有选项,请重选:')
num = int(num)
if num==1:
#遍历大列表
for x in range(0,len(self.student_list)):
#根据x的值 从大列表中取出小字典
student=self.student_list[x]
#对象中取出姓名、年龄、电话 属性值=对象.属性名
name=student.name
age=student.age
phone=student.phone
print('序号:%s姓名:%s年龄:%s电话:%s'%(x,name,age,phone))
else:
name = input('请输入要查询学员的姓名:')
while 1:
a=False
#注意:!!!!!泛型遍历,只会匹配内容,执行完从第一个开始找,for x in..先拿出索引
for x in range(0,len(self.student_list)):
student=self.student_list[x]
if student.name== name:
#根据student(小列表)在大列表中位置,判断学员信息的序号
# index=self.student_list.index(student,0,len(self.student_list)+1)
print('该学员的序号为:%s'%x)
a=True
if a==False:
name = input('您要查询的学生不在该表,重新输入查询学员的姓名:')
else:
break
#修改学员的函数
def update_student(self):
#判断是否有学员信息,如果没有,直接结束函数的执行
if len(self.student_list)==0:
print('没有学员信息,无法进行修改操作!')
#强制结束函数的执行 return 下面的代码 都不会再执行了
return
for x in range(0, len(self.student_list)):
# 根据x的值 从大列表中取出小字典
student = self.student_list[x]
# 从小字典中取出姓名、年龄、电话
name = student.name
age = student.age
phone = student.phone
print('序号:%s姓名:%s年龄:%s电话:%s' % (x, name, age, phone))
index=self.get_index('修改')
#根据选择的序号取出对应的学员信息小列表
student=self.student_list[index]
new_name=input('请输入修改后的姓名(%s):'%student.name)
new_age=input('请输入修改后的年龄(%s):'%student.age)
new_phone=input('请输入修改后的电话(%s):'%student.phone)
#6.修改小列表中的数据
student.name=new_name
student.age =new_age
student.phone=new_phone
print('-----------修改数据完成------------')
def get_index(self,type):
'''
函数的功能描述:获取用户选择的学员序号
:param type: 选择序号类型
:return: 选择的序号
'''
index = input('请选择要%s的学员序号:'%type)
# 转换为整数类型
index = int(index)
while index not in range(0, len(self.student_list)):
index = input('选择的学员序号不存在,请重选:')
index = int(index)
#返回选择的序号
return index
#删除学员信息
#1.根据序号删除 2.删除所有学员 3.根据学员姓名删除(有同名的,把同名的都删除)
def delete_student(self):
if len(self.student_list)==0:
print('没有学员信息,无法执行删除操作!')
return
print('1.根据学员序号删除')
print('2.删除所有学员')
print('3.根据姓名删除学员')
num = int(input('请输入您的选择:'))
# 判断选择的选项是否在范围内
while num not in range(1, 4):
#获取输入的内容 并转换为整数类型
num = int(input('没有改选项,请重选:'))
#判断选择选项
if num==1:
# 1.展示所有学员信息
for x in range(0, len(self.student_list)):
# 根据x的值 从大列表中取出小字典
student = self.student_list[x]
# 从小字典中取出姓名、年龄、电话
name = student.name
age = student.age
phone = student.phone
print('序号:%s姓名:%s年龄:%s电话:%s' % (x, name, age, phone))
# 2.选择删除的序号
index = self.get_index('删除')
rs= input('确定要删除序号为(%s)的学员信息?y(是的)/n(不是):'%index)
if rs == 'y':
# 根据索引删除列表中的数据
del self.student_list[index]
#student_list.pop(index)
elif num==2:
# student_list.clear()
rs = input('确定要删除全部成员?y(是的)/n(不是):')
if rs == 'y':
# 删除列表中全部数据
self.student_list.clear()
else:
print('删除数据操作已取消!')
else:
name=input('请输入要删除的学员姓名:')
while 1:
#bb是判断是否找到对应的name,并且删除
bb=False
#判断大列表中是否还有同名的
a = False
while len(self.student_list):
a = False
for student in self.student_list:
if student.name ==name:
self.student_list.remove(student)
bb=True
a=True
if a==False:
break
# print(student_list)
if bb==False:
name=input('您要删除的学生姓名不存在,请重输:')
else:
break
def start(self):
#声明一个大列表,存放所有学员信息
self.student_list=[]
#2.while循环
while True:
print('**************学员管理系统v2.0************')
print('************出品人:智游集团**********')
print('1.添加学员')
print('2.查询学员')
print('3.修改学员')
print('4.删除学员')
print('0.退出程序')
# 选择操作
num = input('请输入您的选择:')
#转换为整数
num = int(num)
# 判断选择的选项是否在范围内
while num not in range(0, 5):
#重新选择
num = input('没有改选项,请重选:')
#把字符串类型转换整数类型
num = int(num)
#根据选择的选项执行对应的操作
if num==1:
#调用添加学员的函数
self.add_student()
elif num==2:
#调用查询学员的函数
self.query_student()
elif num==3:
#调用修改学员的函数
self.update_student()
elif num==4:
#调用删除学员的函数
self.delete_student()
else:
# print(self.student_list)
print('-----------程序运行结束-------------')
break
if __name__=='__main__':
st=Student()
st.start()