作为一个男人,你可以对django不感兴趣,但你对各个花花网站的资料收集一定感兴趣。
今天我们用python爬虫来给你打开一扇新世界的大门。
一、什么是爬虫
按照一定规则,自动去抓取互联网信息(这里可以是文字、图片、视频等一切你想要得资源)的程序。
简单看一下爬虫的原理:
1、打开浏览器,输入下面网址:
https://movie.douban.com/top250
我们可以在页面上看到每一部电影的相关信息
2、页面上点击鼠标右键——查看页面源代码
3、精美的页面背后实际上是一串串枯燥的代码,而我们想要的所有信息就藏在这些代码里。
4、爬虫要做的工作就是把代码里的有用信息找出来,再保存到数据库或excel里。
二、爬虫案例
案例:爬取豆瓣电影Top250的基本信息,包括电影的名称、豆瓣评分、评价书、电影概况、电影链接等。
做这个项目的前提是掌握python(pāi shéng)的基本知识和pycharm的使用。
还没有入门的同学,请查看我另一篇教程:
从零开始学python
1、pycharm新建一个python项目:douban
2、右键新建一个名叫spider的python文件
3、把下面的代码复制到spider.py里:
#coding=utf-8import reimport urllib.request#爬取网页import xlwtfrom bs4 import BeautifulSoup#影片链接的规则findLink = re.compile(r'')#影片图片findImgSrc = re.compile(r',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): #获取前25页的数据 url = baseUrl + str(i*25) #保存获取到的网页源码 html = askURL(url) # 解析数据 soup = BeautifulSoup(html,"html.parser") #找到div,且属性值class=item for item in soup.find_all('div',class_="item"): # print(item) data = [] #保存一部电影的所有信息 item = str(item) #影片链接 link = re.findall(findLink,item)[0] data.append(link) imgsrc = re.findall(findImgSrc, item)[0] data.append(link) titles = re.findall(findTitle, item) if(len(titles) == 2): ctitle = titles[0] #添加中文名 data.append(ctitle) otitle = titles[1].replace("/","") #添加外国名 otitle = "".join(otitle.split()) #去掉\xa0 data.append(otitle) else: data.append(titles[0]) data.append('') #外国名没有就留空 rating = re.findall(findRating, item)[0] data.append(rating) judge = re.findall(findJudge, item)[0] data.append(judge) #概况 inq = re.findall(findInq, item) if len(inq) != 0: inq = inq[0].replace("。","") #去掉句号 inq = "".join(inq.split()) # 去掉\xa0 data.append(inq) else: data.append('') # 概述没有就留空 #影片相关内容 bd = re.findall(findBd, item)[0] bd = re.sub('
(\s+)?'," ",bd) #去掉 bd = re.sub('/', " ", bd) # 去掉/ # bd = "".join(bd.split()) # 去掉\xa0 data.append(bd.strip()) #去掉前后空格 datalist.append(data) #把处理好的一部电影放进datalist print(datalist) return datalist#得到一个指定的URL内容def askURL(url): head = { "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0" } 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#保存数据到exceldef saveData(datalist,savepath): workbook = xlwt.Workbook(encoding="utf-8") worksheet = workbook.add_sheet('豆瓣电影Top250',cell_overwrite_ok=True) col = ("电影详情链接","图片链接","影片中文名","影片外国名","评分","评价数","概况","相关信息") for i in range(0,8): worksheet.write(0,i,col[i]) for i in range (0,250): print("第%d条"%(i+1)) data = datalist[i] for j in range(0,8): worksheet.write(i+1,j,data[j]) workbook.save(savepath)if __name__ == '__main__': baseUrl = "https://movie.douban.com/top250?start=" datalist = getData(baseUrl) savepath = ".\\豆瓣电影Top250.xls" saveData(datalist,savepath) print("爬取完毕!")
4、鼠标右键点击RUN 'spider'
5、douban文件夹下新生成了一个"豆瓣电影Top250.xls"
打开生成的excel,里面就是我们想要的数据。
是不是简单又有趣!
6、运行程序的时候可能会报没有安装xx包。只需要在python环境里执行:
pip install xx包
这次我准备换一种方式写教程,先让大家把完整的程序跑起来,下一章再补充BeautifulSoup、Re、Xwlt等知识点。
豆瓣电影已经被我们爬得底裤都不剩了,其他网站还远吗?