**
**
python环境配置在前面文章有,如有需要请自行查找
print(“Hello World!”)
基本语法:print(“字符串”) print(算术表达式),也可以相加, 字符串用单引号和双引号都可以
print(“字符”*8) 打印8遍。(字符)
换行符的使用:
占位符的使用
输入与判断的结合(这里有得到输入的值,默认为str,通过强转为int,然后判断。还有个三元运算符。
Python没有变量只有名字 先赋值再使用
命名:不能以数字开始,和其他语言差不多 尽量知意,python会自动判断数据类型。
要分清全局变量与局部变量
定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。
局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。
基本运算
While
For和其他语言的语法不一样了
找出单数
也可以通过for访问数据集合类似的。
用【】的是列表,里面可以存放任意数据类型的值,并且可以通过下标访问,也可以通过-1类似的访问。(代表最后一个元素)
然后就是列表,元组等都对应着很多方法,列举一下常用的。
比较运算符、 比较第一个就得到结果 list1<list2
list 5 展示五次 list=5扩展为五倍
in 与 not in ‘Tom’ in empty --> True
list.count() 计数
list.index(123) 找到123对应的下标
list.revers() 倒序
list.sort()默认从小排序 list.sort(reverse=True) 从大排
6.continue和break
Continue不执行以下的,再次循环。Break直接退出循环。
拼接
方法有点多。。。
str1 = ‘Tom’ str1[1] -->‘o’
方法:
str1.capitalize()第一个字母大写
casefold() 全部小写
center(width) 居中
count(‘sth’)计数
endwith(‘sth’)是否以sth结尾
find(‘sth’) 找到sth返回首个索引,不在返回-1
join(‘123’) 每个间隔里面加入123
lstrip()去掉左边空格
isinstance(a,str)判断是否是某个类型
使用dict创建,为键值对类型。
Dict1为用括号的创建方式。
通过key访问,默认都是字符串类型,前面写的a,但是变成了‘a’。
也是通过Kye进行修改
通过clear清空字典
判断某个值是否在里面
通过pop删除某个元素
‘>’、<、==、<=、>=、!=,可以连续使用
集合是无序、可变序列,使用一对大括号界定,元素不可重复,同一个集合中每个元素都是唯一的。集合中只能包含数字、字符串、元组等不可变类型(或者说可哈希)的数据,而不能包含列表、字典、集合等可变类型的数据。
当不再使用某个集合时,可以使用del命令删除整个集合。集合对象的pop()方法弹出并删除其中一个元素,remove()方法直接删除指定元素,clear()方法清空集合。Add(添加单个元素)。
集合操作
交集,并集,差集。
元组和列表类似,但属于不可变序列,元组一旦创建,用任何方法都不可以修改其元素。元组的定义方式和列表相同,但定义时所有元素是放在一对圆括号“()”中,而不是方括号中。一个元组可以有很多类型数据。
只含有一个元素的时候需要在后面加一个逗号。
元组一旦定义就不允许更改。元组没有append()、extend()和insert()等方法,无法向元组中添加元素。元组没有remove()或pop()方法,也无法对元组元素进行del操作,不能从元组中删除元素。从效果上看,tuple()冻结列表,而list()融化元组。
用del删除元组。
zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。
enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
Items用法得到这个键对值。如果参数个数不够会报错。
Value得到他的值。
使用序列解包遍历enumerate对象
函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。
任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
函数内容以冒号起始,并且缩进。
return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
有参数以及返回结果的
就算斐波那契数列第n个值。
Lambda内置函数使用
Python 提供了一个 time 和 calendar 模块可以用于格式化日期和时间。
时间间隔是以秒为单位的浮点小数。
每个时间戳都以自从1970年1月1日午夜(历元)经过了多长时间来表示。
Python 的 time 模块下有很多函数可以转换常见日期格式。如函数time.time()用于获取当前时间戳, 如下实例:
格式化日期:time.strftime(format[, t])
日历:
Calendar模块有很广泛的方法用来处理年历和月历,例如打印某月的月历:
open(file, mode=‘r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
hello.txt里面有世界你好,然后读取出来
这里注意,因为是中文,所以需要把编码格式设置为utf-8
Write()用于写入内容
一般模式有以下几个
w+:先清空所有文件内容,然后写入,然后你才可以读取你写入的内容
r+:不清空内容,可以同时读和写入内容。 写入文件的最开始
a+:追加写,所有写入的内容都在文件的最后
由于读取之后游标移到最后,此时需要使用seek将游标移到前面。
一般读取之后需要关闭文件,以免占用缓冲区,使用的是f.close();
爬虫用到了一些基本的库
Beautifulsoup, urllib, re, xlwt, sqlites
里面还涉及到正则表达式的使用。例如:
findLink = re.compile(r’’),
将得到的数据分别放入数据库和excel里面,创建数据库以及各种初始化的代码都有。多加练习。
#-- codeing = utf-8 --
#@Author : Tom
#@File : douban.py
#@Software : PyCharm
import bs4
from bs4 import BeautifulSoup
import urllib
import urllib.request
import re
import xlwt
import sqlite3
def main():
print(“af”)
baseurl=“https://movie.douban.com/top250?start=”
datalist=getData(baseurl) #savepath = ".\\豆瓣电影Top250.xls" 保存到excel dbpath = "movietest.db" #saveData(datalist,) saveData2DB(datalist,dbpath) #askURL(baseurl) #解析网页
#爬取网页
#链接规则
findLink = re.compile(r’’)
findImgSrc = re.compile(r’<img.src="(.?)"’,re.S) #re.S让换行符包含在内
findTitle = re.compile(r’(.)’)
findRating = re.compile(r’(.)’)
findJudge = re.compile(r’(\d*)人评价’)
findInq = re.compile(r’(.)’)
findBd = re.compile(r’
(.?)
’,re.S)def getData(baseurl):
datalist = []
for i in range(0,10): #调用获取页面信息的函数,10次
url = baseurl + str(i*25)
#askURL(url)
html = askURL(url) #保存网页
#逐一解析网页 soup = BeautifulSoup(html, "html.parser") for item in soup.find_all('div',class_="item"): #为了测试,查看电影item print(item) data = [] #保存一部电影的所有信息 item = str(item) link = re.findall(findLink,item)[0] #print(link) data.append(link) imgSrc = re.findall(findImgSrc,item)[0] data.append(imgSrc) titles = re.findall(findTitle,item) if(len(titles)==2): ctitle = titles[0] #中文 data.append(ctitle) otitle = titles[1].replace("/","") #添加外国名 data.append(otitle) else: data.append(titles[0]) data.append(' ') #留空 rating = re.findall(findRating,item)[0] data.append(rating) judgeNum = re.findall(findJudge,item)[0] data.append(judgeNum) inq = re.findall(findInq,item) if len(inq)!=0: inq = inq[0].replace("。","") data.append(inq) else: data.append(" ") bd = re.findall(findBd,item)[0] bd = re.sub('<br(\s+)?/>(\s+)?'," ",bd) #去掉br bd = re.sub('/'," ",bd) data.append(bd.strip()) datalist.append(data) #print(datalist) return datalist
#保存数据
#得到指定一个URL的网页内容
def askURL(url):
head = {
“User-Agent”: “Mozilla / 5.0(Windows NT 10.0;WOW64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 86.0.4240.198Safari / 537.36”
} #用户代理,伪装我们是浏览器,告诉浏览器,我们可以收到什么水平的内容
request = urllib.request.Request(url,headers=head) html="" try: response = urllib.request.urlopen(request) html = response.read().decode("utf-8") #print(html) except urllib.error.URLError as e: if hasattr(e,"code"): print(e.code) if hasattr(e,"resson"): print(e.resson) return html
def saveData(datalist,savepath):
print("…save")
book = xlwt.Workbook(encoding=“utf-8”)
sheet = book.add_sheet(“豆瓣电影”,cell_overwrite_ok=True)
col = (“电影详情连接”,“图片链接”,“影片中文名”,“影片外国名”,“评分”,“评价数”,“概述”,“相关信息”)
for i in range (0,8):
sheet.write(0,i,col[i])
for i in range (0,250):
print(“第%d条” %(i+1))
data = datalist[i]
for j in range(0,8):
sheet.write(i+1,j,data[j])
book.save(“student.xls”)
def saveData2DB(datalist,dbpath):
#init_db(dbpath)
conn = sqlite3.connect(dbpath)
cur = conn.cursor()
for data in datalist: for index in range(len(data)): if index == 4 or index == 5: #数字,不需要转换 continue data[index] = '"'+data[index]+'"' #将其变为字符串,可以拼接,插入,开始的出来的时候不是字符串 sql = ''' insert into movie250( info_link,pic_link,cname,ename,score,rated,instroduction,info) values(%s) '''% ",".join(data) cur.execute(sql) conn.commit() cur.close() conn.close()
def init_db(dbpath):
sql = ‘’’
create table movie250
(id integer primary key autoincrement,
info_link text,
pic_link text,
cname varchar,
ename varchar,
score numeric,
rated numeric,
instroduction text,
info text
)
‘’’
conn = sqlite3.connect(dbpath)
cursor = conn.cursor()
cursor.execute(sql)
conn.commit()
conn.close()
if name ==“main”: #调用函数
main()
#init_db(“movietest.db”)
print(“爬取完毕!”)
结果:
Excel结果: