我们在获取到网页的源代码之后,就可以开始爬取工作了。
# 得到一个网页
def askURL(url):
head = { # 模拟头部发消息
"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.74 Safari/537.36 Edg/99.0.1150.46"
}
# 用户代理表示告诉服务器,我们是什么类型的机器
request = urllib.request.Request(url, headers=head)
html = ""
首先我们要得到网页,利用模拟头部发送消息,让我们可以顺利的进入网页中。
#影片详情链接的规则
findLink = re.compile(r'<a class="(.*?)">') #创建正则表达式对象,表示规则(字符串的模式)
#影片图片链接规则
findImgSrc = re.compile(r'<img.*src="(.*?)"',re.S) #re.S 让换行符包含在字符中
其次就是要对所需要爬取信息的源代码进行分类和选取,将他们的格式输入到re.compile的函数中。(根据需求进行编写)
def getDate(baseurl):
datelist = []
for i in range(0,10):
url = baseurl + str(i*25)
html=askURL(url)
# 逐一解析数据
soup =BeautifulSoup(html,"html.parser")
print(datelist)
return datelist
定义一个函数:以下两段代码全部在上述函数的for循环中。
# 逐一解析数据
for item in soup.find_all('div', class_="item"): #查找符合要求的字符串
#print(item) #测试:查看电影item全部信息
data =[] #保存一部电影的所有信息
item = str(item)
对获取的的数据进行分析,查找并且保存在data[]数组中,方便以后保存在表格和数据库在中。
#获取详情链接
link = re.findall(findLink,item) [0] #re库通过正侧表达式查找指定的字符串
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(' ') #留空
利用正则表达式对我们所需要的一些信息进行查找匹配
datelist.append(data) #将处理好的一部电影的信息放入datalist
将数据储存在data中。
def saveData(datelist,savepath): # 保存数据
book = xlwt.Workbook(encoding="utf-8",style_compression=0) #创建wookbook
sheet = book.add_sheet('电影top',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))
date = datelist[i]
for j in range(0,8):
sheet.write(i+1,j,date[j])
book.save('student.xls')
将所收集的的函数放入表格中。
def main():
baseurl = "某网站(根据个人需要)"
datelist = getDate(baseurl) # 爬取网页
savepath = "电影Top.xls"
saveData(datelist,savepath) # 保存数据
if __name__ == '__main__':
main()
print("爬取完毕")
最后将所有的函数整合,在定义一个新的函数,并且输出。
下面是爬取网页的代码和所得的最后数据。
from bs4 import BeautifulSoup # 网页解析
import re # 正则表达式,进行文字匹配
import urllib.request # 制定url,获取网页数据
import xlwt # 进行excel操作
import sqlite3 # 进行sqlite数据库操作
def main():
baseurl = "某电影网站"
datelist = getDate(baseurl) # 爬取网页
savepath = "电影Top.xls"
saveData(datelist,savepath) # 保存数据
#影片详情链接的规则
findLink = re.compile(r'<a class="(.*?)">') #创建正则表达式对象,表示规则(字符串的模式)
#影片图片链接规则
findImgSrc = re.compile(r'<img.*src="(.*?)"',re.S) #re.S 让换行符包含在字符中
#影片片名
findTitle = re.compile(r'<span class="title">(.*?)</span')
#影片评分
findRating = re.compile(r'<span class="rating_num" property="v:average">(.*)</span>')
#评价人数
findJudge = re.compile(r'<span>(\d*)人评价</span>')
#概况
findDing = re.compile(r'<span class="inq">(.*)</span>')
#找到影片的相关内容
findBd = re.compile(r'<p class="">(.*?)</p>',re.S)
def getDate(baseurl):
datelist = []
for i in range(0,10):
url = baseurl + str(i*25)
html=askURL(url)
# 逐一解析数据
soup =BeautifulSoup(html,"html.parser")
for item in soup.find_all('div', class_="item"): #查找符合要求的字符串
#print(item) #测试:查看电影item全部信息
data =[] #保存一部电影的所有信息
item = str(item)
#获取详情链接
link = re.findall(findLink,item) [0] #re库通过正侧表达式查找指定的字符串
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(findDing,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()) #去掉空格
data.append(inq) #概述
datelist.append(data) #将处理好的一部电影的信息放入datalist
print(datelist)
return datelist
# 得到一个网页
def askURL(url):
head = { # 模拟头部发消息
"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.74 Safari/537.36 Edg/99.0.1150.46"
}
# 用户代理表示告诉服务器,我们是什么类型的机器
request = urllib.request.Request(url, headers=head)
html = ""
try:
response =urllib.request.urlopen(request)
html = response.read().decode("utf-8")
except urllib.error.URLError as e:
if hasattr(e, "code"):
print(e.code)
if hasattr(e, "reason"):
print(e.reason)
return html
def saveData(datelist,savepath): # 保存数据
book = xlwt.Workbook(encoding="utf-8",style_compression=0) #创建wookbook
sheet = book.add_sheet('电影top',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))
date = datelist[i]
for j in range(0,8):
sheet.write(i+1,j,date[j])
book.save('student.xls')
if __name__ == '__main__':
main()
print("爬取完毕")
注:所述可能有不恰当的地方,欢迎大佬指正。抓取其他网页的话根据自己的需要去修改网址,并且修改自己所要抓取的内容
本文介绍了一个具体的网页爬虫实现过程,包括如何构造请求头、解析HTML页面、使用正则表达式提取所需信息,并最终将数据保存到Excel文件中。
1129





