1.1点击File加入Settings
1.2选择提交需要的工具包
-------!常用的系统模块
1. sys
2. bs4\BeautifulSoup //网页解析~获取数据
3. re //正则表达式~进行文字匹配
4. urllib //制定URL~获取网页数据
5. xlwt //进行保存Excel操作
6. sqlite3 //进行SQLite数据库操作
2.1、Bs4函数
from bs4 import BeautifulSoup
file = open("./baidu.html","rb")
html = file.read().decode("utf-8")
bs = BeautifulSoup(html,"html.parser")
# print(bs)
#拿到标签文字内容
# print(bs.a) #查询a标签
# print(bs.a.string) #a标签的内容
#拿到标签属性
# print(bs.a.attrs) #a标签内的属性与值
#---------------------------------------------------------------------------------------
#1.文档遍历
# i = 1
# while i < len(bs.head.contents):
# print(bs.head.contents[i])
# i+=1
# if i>len(bs.head):
# break
#1.1文档搜索
#字符串过滤方式 : 会查找与字符串匹配的内容
# t_list = bs.find_all("a")
#正则表达式搜索 : 使用search()方法来匹配内容(包含)
# t_list = bs.find_all(re.compile("a"))
#方法搜索 : 根据函数来进行搜索内容
# def name_is_exists(tag):
# return tag.has_attr("name")
#
# t_list = bs.find_all(name_is_exists)
# for item in t_list:
# print(item)
#------------------------------------------------------------------------------
#2.kwargs 参数
# t_list = bs.find_all(id="head")
# for item in t_list:
# print(item)
#3.text参数
# t_list = bs.find_all(text = "hao123")
# t_list = bs.find_all(text = [ "hao123","地图","贴吧"])
# t_list = bs.find_all(text = re.compile("\d")) #应用正则表达式来寻找特定文本内容(标签里的字符串)
#4.limit参数
# t_list = bs.find_all("a",limit=3)
# for item in t_list:
# print(item)
#5.css选择器
# t_list = bs.select(".toindex")
# t_list = bs.select("#u1")
# t_list = bs.select("a[class='toindex']") #查找标签里的属性
# t_list = bs.select("head > title") #从父标签查询子标签
# for item in t_list:
# print(item)
# t_list = bs.select(".pf ~ .lb") #兄弟标签内查找
# print(t_list[0].get_text())
2.2、Re函数
import re
#使用模板对象进行比对
# base = re.compile("AA") #用于验证其他字符串是否相同
# m = base.search("ABCAA") #search()字符串内容校验函数
#去除模板对象进行比对
# m = re.search("asb","AAasb")
# print(m)
#在指定范围内查询指定内容
print(re.findall("[A-Z|a-z]+\d","ABffdBDH321"))
#sub()替换函数
# m = re.sub("A","你好","A,很高兴认识你")
# print(m)
2.3、Urllib函数
Urllib源码操作快捷键
2.4、Xlwt函数
import xlwt
workbook = xlwt.Workbook(encoding="utf-8") #创建Workbook对象
worksheet = workbook.add_sheet("sheet1") #创建工作表
#打印99乘法表
for i in range(0,9):
for j in range(0,i+1):
worksheet.write(i,j,"%d x %d = %d"%(i+1,j+1,(i+1)*(j+1))) # 写入数据 第一行参数,第二列参数,第三内容参数
workbook.save('student.xls') #保存数据
1. 爬取网页(模拟成网页请求爬取指定网页)
#获取影片的链接
finlink = re.compile(r'') #指定读取详情规则
#获取影片图片
finimg = re.compile(r',re.S) #re包中S函数去除换行避免获取不全数据
#获取影片片名
fintitle = re.compile(r'(.*)')
#获取影片评分
finrating = re.compile(r' ')
#获取影片评价
finpj = re.compile(r'(\d*)人评价')
#找到概况
fininq = re.compile(r'(.*)')
#获取影片的相关内容
finBd = re.compile(r'(.*?)
',re.S)
#爬取网页
def getData(baseUrl):
datalist = []
for i in range(0,1): #1.调用获取页面信息的函数·十次
url = baseUrl + str(i*25) #2.每进入一遍读取25次数据
# 2.获取数据
html = askURL(url) #3.保存获取到的网页源码
soup = BeautifulSoup(html,"html.parser") #1.获取到html类型的数据
# 3.逐一解析数据
for item in soup.find_all("div",class_="item"): #2.循环遍历符合指定字符串,形成列表
# print(item) #3.测试:获取到指定内容的所有信息
return datalist
2. 获取数据(使用工具包中的BeautifulSoup获取指定内容数据)
#得到指定一个URL网页内容
def askURL(url):
head = {
#1.模拟一个游览器头部信息
"User-Agent":" Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36"
}
request = urllib.request.Request(url,headers=head) #2.封装请求头传递参数
html = ""
try:
response = urllib.request.urlopen(request) #3.请求参数响应到需要爬取的网页中
html = response.read().decode("utf-8") #4.进行编码格式防止乱码
# print(html)
except urllib.error.URLError as e: #5.异常处理以及捕捉异常
if hasattr(e,"code"):
print(e.code)
if hasattr(e,"reason"):
print(e.reason)
return html #6.返回一个html网页数据
3. 解析内容(快速查找到需要的数据)
#爬取网页
def getData(baseUrl):
datalist = []
for i in range(0,1): #1.调用获取页面信息的函数·十次
url = baseUrl + str(i*25) #2.每进入一遍读取25次数据
# 2.获取数据
html = askURL(url) #3.保存获取到的网页源码
soup = BeautifulSoup(html,"html.parser") #1.获取到html类型的数据
# 3.逐一解析数据
for item in soup.find_all("div",class_="item"): #2.循环遍历符合指定字符串,形成列表
# print(item) #3.测试:获取到指定内容的所有信息
data = [] #4.保存一组指定的数据
item = str(item) #5.把遍历出来的item数据转为字符串
alink = re.findall(finlink,item)[0] #6.使用re正则查找符合指定字符串
data.append(alink) #7.保存到data
imglink = re.findall(finimg,item)[0]
data.append(imglink) #添加图片
titlelink = re.findall(fintitle,item)
if (len(titlelink) == 2): #查询出来有两条相同数据需要不同添加
ctitle = titlelink[0]
data.append(ctitle) #添加名称
otitle = titlelink[1].replace("/","") #replace替换函数("条件","替换")
data.append(otitle)
else:
data.append(titlelink[0])
data.append(' ') #给相同列流于位置
ratinglink = re.findall(finrating,item)[0]
data.append(ratinglink) #添加评分
judgelink = re.findall(finpj,item)[0]
data.append(judgelink) #添加评价
inqlink = re.findall(fininq,item)
if (len(inqlink) != 0):
inq = inqlink[0].replace("。","")
data.append(inq) # 添加概况
else:
data.append(" ") #保留位置为空
bd = re.findall(finBd,item)[0] #添加内容
bd = re.sub('
(\s+)?'," ",bd) #替换指定内容
bd = re.sub('/ '," ",bd)
data.append(bd.strip()) #strip()去左右空格
# 把解析好的数据添加到datalist中
datalist.append(data)
print(datalist)
return datalist
4. 保存数据
#保存数据
def saveData(datalist,savepath):
print("save.............................")
book = xlwt.Workbook(encoding="utf-8",style_compression=0) # 创建Workbook对象
sheet = book.add_sheet("豆瓣电影T250",cell_overwrite_ok=True) # 创建工作表
col = ("电影详情链接","电影图片链接","影片中文名","影片外国名","电影评分","评价","概况","相关内容")
for i in range(0,7):
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(savepath) # 保存数据
5.构建流程源码(内容有点复杂不懂的@入狱的博主)
# -*- codeing = utf-8 -*-
# @Time 14:40
# @Author: Hjj
# @File: Demo1.py
# @Software: PyCharm
from bs4 import BeautifulSoup #1.网页解析~获取数据
import re #2.正则表达式~进行文字匹配
import urllib.request,urllib.error #3.制定URL~获取网页数据
import xlwt #4.进行保存Excel操作
import sqlite3 #5.进行SQLite数据库操作
def main():
baseUrl = "https://movie.douban.com/top250?start="
#1.爬取网页
datalist = getData(baseUrl)
#4.保存数据
savepath = "豆瓣电影Top250.xls"
saveData(datalist,savepath)
#获取影片的链接
finlink = re.compile(r'') #指定读取详情规则
#获取影片图片
finimg = re.compile(r',re.S) #re包中S函数去除换行避免获取不全数据
#获取影片片名
fintitle = re.compile(r'(.*)')
#获取影片评分
finrating = re.compile(r' ')
#获取影片评价
finpj = re.compile(r'(\d*)人评价')
#找到概况
fininq = re.compile(r'(.*)')
#获取影片的相关内容
finBd = re.compile(r'(.*?)
',re.S)
#爬取网页
def getData(baseUrl):
datalist = []
for i in range(0,10): #1.调用获取页面信息的函数·十次
url = baseUrl + str(i*25) #2.每进入一遍读取25次数据
# 2.获取数据
html = askURL(url) #3.保存获取到的网页源码
soup = BeautifulSoup(html,"html.parser") #1.获取到html类型的数据
# 3.逐一解析数据
for item in soup.find_all("div",class_="item"): #2.循环遍历符合指定字符串,形成列表
# print(item) #3.测试:获取到指定内容的所有信息
data = [] #4.保存一组指定的数据
item = str(item) #5.把遍历出来的item数据转为字符串
alink = re.findall(finlink,item)[0] #6.使用re正则查找符合指定字符串
data.append(alink) #7.保存到data
imglink = re.findall(finimg,item)[0]
data.append(imglink) #添加图片
titlelink = re.findall(fintitle,item)
if (len(titlelink) == 2): #查询出来有两条相同数据需要不同添加
ctitle = titlelink[0]
data.append(ctitle) #添加名称
otitle = titlelink[1].replace("/","") #replace替换函数("条件","替换")
data.append(otitle)
else:
data.append(titlelink[0])
data.append(' ') #给相同列流于位置
ratinglink = re.findall(finrating,item)[0]
data.append(ratinglink) #添加评分
judgelink = re.findall(finpj,item)[0]
data.append(judgelink) #添加评价
inqlink = re.findall(fininq,item)
if (len(inqlink) != 0):
inq = inqlink[0].replace("。","")
data.append(inq) # 添加概况
else:
data.append(" ") #保留位置为空
bd = re.findall(finBd,item)[0] #添加内容
bd = re.sub('
(\s+)?'," ",bd) #替换指定内容
bd = re.sub('/ '," ",bd)
data.append(bd.strip()) #strip()去左右空格
# 把解析好的数据添加到datalist中
datalist.append(data)
# print(datalist)
return datalist
#得到指定一个URL网页内容
def askURL(url):
head = {
#1.模拟一个游览器头部信息
"User-Agent":" Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36"
}
request = urllib.request.Request(url,headers=head) #2.封装请求头传递参数
html = ""
try:
response = urllib.request.urlopen(request) #3.请求参数响应到需要爬取的网页中
html = response.read().decode("utf-8") #4.进行编码格式防止乱码
# print(html)
except urllib.error.URLError as e: #5.异常处理以及捕捉异常
if hasattr(e,"code"):
print(e.code)
if hasattr(e,"reason"):
print(e.reason)
return html #6.返回一个html网页数据
#保存数据
def saveData(datalist,savepath):
print("save.............................")
book = xlwt.Workbook(encoding="utf-8",style_compression=0) # 创建Workbook对象
sheet = book.add_sheet("豆瓣电影T250",cell_overwrite_ok=True) # 创建工作表
col = ("电影详情链接","电影图片链接","影片中文名","影片外国名","电影评分","评价","概况","相关内容")
for i in range(0,7):
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(savepath) # 保存数据
#执行指定函数
if __name__ == "__main__":
main()
print("保存完毕.....................................")
6.运行结果
6.1 创建Excel.xls表格保存数据