爬取某瓣电影Top250的基本信息
#-*- codeing = utf-8 -*-
from bs4 import BeautifulSoup #网页解析,获取数据
import re # 正则表达式,进行文字匹配
import urllib.request,urllib.error #制定URL,获取网页数据
import xlwt #进行excel操作
import sqlite3 #进行SQLite数据库操作
def main():
#基址
baseurl="https://movie.douban.com/top250?start="
#1.爬取网页
datalist=getData(baseurl)
# 保存路径
savepath='.\\豆瓣电影Top250.xls'
#3.保存数据
saveData(savepath)
# 爬取网页
def getData(baseurl):
datalist=[]
#2.逐一解析数据
return datalist
#保存数据
def saveData(savapath):
print()
if __name__=="__main__":#当程序执行时
# 调用函数
main()
def askURL(url):
# head模拟浏览器头部信息,向豆瓣服务器发送消息
head ={"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1"}
# 携带头部信息访问url
request=urllib.request.Request(url,headers=head)
html=""
# 看3.1对urllib的补充理解
response=urllib.request.urlopen(request)
html=response.read().decode("utf-8")
print(html)
记得在main里面调用askURL哈
# 爬取网页
def getData(baseurl):
datalist=[]
# 调用获取页面信息的函数,10次
for i in range(0,10):
url= baseurl +str(i*25)
html=askURL(url) #获取一页html,保存获取到的网页源码
#逐一解析数据【注意:是在for循环里面解析,弄到一个网页解析一下】
return datalist
解析影片详情链接为例,可用同样方式解析其它电影信息
#影片详情链接的规则
findlink=re.compile(r'') #创建正则表达式对象,表示规则(字符串的模式)
findImgSrc=re.compile(r'"' ,re.S) #re.S让换行符包含字符
# 爬取网页
def getData(baseurl):
datalist=[]
# 调用获取页面信息的函数,10次
for i in range(0,10):
url= baseurl +str(i*25)
html=askURL(url) #获取一页html,保存获取到的网页源码
#2.逐一解析数据【注意:是在for循环里面解析,弄到一个网页解析一下】
soup=BeautifulSoup(html,"html.parser")
for item in soup.find_all('div',class_="item"):#查找符合要求的字符串,形成列表
# print(item)#测试:查看电影item全部信息
data=[]# 保存一部电影的所有信息
item=str(item)
# print(item+'HHHHHH')
# break
# 影片详情的链接
link=re.findall(findlink,item)[0]# re库用来通过正则表达式查找指定的字符串
print(link)
return datalist
#保存数据
def saveData(datalist,savepath):
book = xlwt.Workbook(encoding="utf-8",style_compression=0) # 创建workbook对象
sheet = book.add_sheet('司六',cell_overwrite_ok=True) # 创建工作表
col=("详情链接","图片链接","电影名称")
for i in range(0,3):
sheet.write(0,i,col[i])#列名
for i in range(0,250):
print("第%d条" %i)
data=datalist[i]
for j in range(0,3):
sheet.write(i+1,j,data[j])#数据
book.save(savepath) # 保存数据表
import urllib.request
# 获取一个get请求
response=urllib.request.urlopen("http://www.baidu.com")
print(response.read().decode('utf-8'))
BeautifulSoup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是python对象,所有对象可以归纳为4种
from bs4 import BeautifulSoup
file = open("./司六米希.html",'rb')
html=file.read()
bs=BeautifulSoup(html,"html.parser")
# 1.Tag 标签及其内容:拿到它找到的第一个内容
print(bs.title)
print(type(bs.title))
# 2.NavigableString 标签里的内容(字符串)
print(bs.title.string)
print(type(bs.title.string))
# 3.attrs 获得属性的键值对
print(bs.a.attrs)
# 4.BeautifulSoup表示整个文档
print(type(bs))
print(bs.name)
# 5.Comment 是一个特殊的NavigableString,输出的内容不包含注释符号
print(bs.head.contents)
print(bs.head.contents[1])
# (1)find_all() ()里面加入规则
# 字符串过滤:会查找与字符串完全匹配的内容
#eg: 与a字符串标签完全一样
# k_list=bs.find_all("a")
#正则表达式搜索:使用search()方法匹配内容
# 会找到所有含a的某一标签及其内容
# import re
# 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)
print(t_list)
for item in t_list:
print(item)
import xlwt
workbook =xlwt.Workbook(encoding="utf-8")#创建workbook对象
worksheet=workbook.add_sheet('sheet1')#创建工作表
worksheet.write(0,0,'hello')#写入数据,第一行参数‘行’,第二个参数‘列’,第三个参数内容
workbook.save('司六米希.xls')#保存数据表
#-*- codeing = utf-8 -*-
from bs4 import BeautifulSoup #网页解析,获取数据
import re # 正则表达式,进行文字匹配
import urllib.request,urllib.error #制定URL,获取网页数据
import xlwt #进行excel操作
import sqlite3 #进行SQLite数据库操作
def main():
#基址
baseurl="https://movie.douban.com/top250?start="
#1.爬取网页
datalist=getData(baseurl)
# 保存路径
savepath='豆瓣电影Top250.xls'
#3.保存数据
saveData(datalist,savepath)
# askURL("https://movie.douban.com/top250?start=0")
#影片详情链接的规则
findlink=re.compile(r'') #创建正则表达式对象,表示规则(字符串的模式)
findImgSrc=re.compile(r',re.S) #re.S让换行符包含字符
findTitle=re.compile(r'(.*?)')
# 爬取网页
def getData(baseurl):
datalist=[]
# 调用获取页面信息的函数,10次
for i in range(0,10):
url= baseurl +str(i*25)
html=askURL(url) #获取一页html,保存获取到的网页源码
#2.逐一解析数据【注意:是在for循环里面解析,弄到一个网页解析一下】
soup=BeautifulSoup(html,"html.parser")
for item in soup.find_all('div',class_="item"):#查找符合要求的字符串,形成列表
# print(item)#测试:查看电影item全部信息
data=[]# 保存一部电影的所有信息
item=str(item)
# print(item+'HHHHHH')
# break
# 影片详情的链接
link=re.findall(findlink,item)[0]# re库用来通过正则表达式查找指定的字符串
# print(link)
data.append(link) #添加链接
imgSrc=re.findall(findImgSrc,item)[0]
data.append(imgSrc)#添加图片
# print(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('')#外国名字留空
datalist.append(data)#把处理好的一部电影信息放入datalist
# print(datalist)
return datalist
# 得到制定一个URL的网页内容
def askURL(url):
#User-Agent用户代理,表示告诉豆瓣服务器,我们是什么类型的机器,浏览器(本质上是告诉浏览器,我们可以接收什么水平的文件内容)
# head模拟浏览器头部信息,向豆瓣服务器发送消息
head ={"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1"}
# 携带头部信息访问url
request=urllib.request.Request(url,headers=head)
html=""
# 看urllib的补充理解
response=urllib.request.urlopen(request)
html=response.read().decode("utf-8")
# print(html)
return html
#保存数据
def saveData(datalist,savepath):
book = xlwt.Workbook(encoding="utf-8",style_compression=0) # 创建workbook对象
sheet = book.add_sheet('司六',cell_overwrite_ok=True) # 创建工作表
col=("详情链接","图片链接","电影名称")
for i in range(0,3):
sheet.write(0,i,col[i])#列名
for i in range(0,250):
print("第%d条" %i)
data=datalist[i]
for j in range(0,3):
sheet.write(i+1,j,data[j])#数据
book.save(savepath) # 保存数据表
if __name__=="__main__":#当程序执行时
# 调用函数
main()